我有这种方法需要一个块,但并不总是调用该块。见方法:
- (void)updateWithCompletion:(void (^)(void))completion {
[MYObject myMethodWithCompletion:^(NSArray *array, NSError *error) {
if (error) {
NSLog(@"%s, ERROR not nil", __FUNCTION__);
completion();
return;
}
NSLog(@"%s, calling completion %d", __FUNCTION__, &completion);
completion();
NSLog(@"%s, finished completion", __FUNCTION__);
}];
}
我在完成过程中还有一些NSLogs。有时,此程序计数器刚好在上面的代码中对completion()的调用之后结束。我不明白为什么会这样,因为调用代码总是将原义的代码块作为输入传递。
如果您对包含addressof运算符的行的输出感到好奇,它总是有所不同,但绝不会为0或nil。
是什么导致无法执行完成?
最佳答案
事实证明,完成指向的代码块与我期望的不同。从viewWillAppear调用了updateWithCompletion,其中包含一个空代码块。这就是为什么我没有看到NSLog语句的原因。看到我有一个空的代码块后,很明显如何解决问题。
经验教训:如果代码块为零,则程序将崩溃。这没有发生,所以这意味着它正在调用我所期望的以外的东西。
希望这对某人有帮助。
关于iphone - 未调用完成块。如何检查有效性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13810525/