我有一个单例 class ,负责处理所有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)

我在这里做错了什么?

最佳答案

一些背景信息:这些块是对象,如果任何块是nil而您尝试调用它们,则会使应用程序崩溃。

在调用之前,onComplete块会以某种方式变为nil。以下if (...)语句可帮助您防止调用nil指针,因此应用程序不会崩溃。

if (onComplete) onComplete();

10-08 20:05