我有一个需要一个 block 的方法,但该 block 并不总是被调用。方法见:
- (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。
什么情况会导致completion不被执行?
最佳答案
事实证明,完成指向的代码块与我预期的不同。 updateWithCompletion 是从 viewWillAppear 使用空代码块调用的。这就是为什么我没有看到 NSLog 语句。当我看到我有一个空代码块时,很明显如何解决这个问题。
经验教训:如果代码块为零,程序就会崩溃。这没有发生,所以这意味着它调用的内容与我预期的不同。
希望这对某人有帮助。
关于iphone - 未调用完成 block 。如何检查有效性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13810525/