iphone - 未调用完成 block 。如何检查有效性?

标签 iphone objective-c ios ipad objective-c-blocks

我有一个需要一个 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/

相关文章:

ios - Xcode iOS 模拟器中的远程 Web 检查器

iphone - 在 iPhone 中绘制直方图需要更高的准确性

iphone - 如何在 iOS 中计算对数?

iphone - Objective-C : How to improve repetitive method implementations using method forwarding

iphone - View 无法在真实的 ipad 设备中导航,但在模拟器中工作正常

objective-c - 使用自定义字体计算 NSString 的高度

objective-c - 带渐变填充的 Delaunay 三角剖分?

ios - 调用deleteRowsAtIndexPaths时,具有自动调整单元格大小的UITableView变得不稳定

ios - 无法使用 PHPhotoLibrary 将 UIImage 保存到相机胶卷

ios - 为什么 UITextfield.text 从数组中检索时返回精确的 float ?