我有一个单例类来处理所有 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/