iphone - 嵌套block = EXC_BAD_ACCESS

标签 iphone ios objective-c xcode

我有一个单例类来处理所有 Game Center 逻辑:

typedef void (^GameCenterCallbackFinishUpdating)();

- (void)getAllMatches:(GameCenterCallbackFinishUpdating)onComplete
{
    [GKTurnBasedMatch loadMatchesWithCompletionHandler:^(NSArray *matches, NSError *error)
    {      
        //Do stuff here... 
        onComplete();
    }];
}

在我使用的另一个 viewController 中:

[[GameCenterHelper sharedHelper] getAllMatches:^{

    [self.myTableView reloadData]; 

}];

当我在应用程序中时效果很好,但是一旦我关闭应用程序(后台)然后再次启动它,我得到:

    onComplete();     ---- Thread 1: EXC_BAD_ACCESS (code=2, address=0xc)

我在这里做错了什么?

最佳答案

一些背景信息: block 是对象,如果任何 block 是 nil 并且您尝试调用它们,它会崩溃应用程序。

不知何故, block onComplete 在你调用它之前变成了 nil。以下 if (...) 语句可帮助您防止调用 nil 指针,因此应用程序不会崩溃。

if (onComplete) onComplete();

关于iphone - 嵌套block = EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14280176/

相关文章:

ios - 如何旋转到只有一个 View Controller 的横向

ios - iOS/Objective-C 上的 Anymote 协议(protocol)

ios - 更改属性类别

java - j2objc真的支持反射吗?

javascript - 在 Obj C 中捕获 React Native 错误

iphone - CGAffineTransformMakeRotation不仅可以旋转,还可以移动和拉伸(stretch)UIImageView

ios - faSTLane gym 你能跳过存档和导出步骤吗

iphone - 配对dispatch_resume和dispatch_suspend以强制终止应用程序

ios - iPhone 核心数据 "Automatic Lightweight Migration"

iphone - 在 Flash 上运行 iOS 应用程序