我的应用会记录它是否成功通过 Game Center 的身份验证。当它开始一个新游戏或当用户查看分数列表时,如果本地玩家没有成功验证,并且如果应用程序当时没有尝试验证用户,它会再次尝试.
(为什么?如果您从无网络区域移动到网络区域。)
不幸的是,在 iOS6/XCode 4.5 下,它开始崩溃。或者至少在某些有限的情况下似乎是这样:当用户使用错误的密码和/或不存在的帐户无法登录时。成功登录后,一切正常。
在登录失败后,当我去做一些导致重新验证检查发生的事情时,我得到了这个:
2012-09-25 15:54:47.829 应用程序名称 [1493:907] * 断言失败 -[UIWindowController 转换:fromViewController:toViewController:target:didEndSelector:],/SourceCache/UIKit/UIKit-2372/UIWindowController.m:211
然后这实际上崩溃了:
2012-09-25 15:55:25.569 应用程序名称 [1493:907] * 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“尝试开始从 <GKModalRootViewController: 0x1cd8b2a0> 到 <GKHostedAuthenticateViewController: 0x1e31a350> 的模态转换过渡已经在进行中。等待viewDidAppear / viewDidDisappear知道当前的过渡已经完成了” *第一掷调用堆栈:(0x394932a3 0x31db297f 0x3949315d 0x383fd2af 0x3640377b 0x36402fcf 0x394969c4 0x393edfeb 0x36521733 0x32a83d2d 0x3264b11f 0x3264a4b7 0x3264f1bd 0x39466f3b 0x393d9ebd 0x393d9d49 0x353132eb 0x3636b301 0x7e863 0x7e808)的libc ++ abi.dylib:终止叫抛出异常
这是麻烦的代码:
-(void)authenticateLocalUser {
if (!self.checkingLocalPlayer) {
self.checkingLocalPlayer = YES;
GKLocalPlayer *thisPlayer = [GKLocalPlayer localPlayer];
if (!thisPlayer.authenticated) {
[[GKLocalPlayer localPlayer]
authenticateWithCompletionHandler:^(NSError *error)
{
[self finishGameCenterAuthWithError:error];
}
];
}
}
}
知道我在这里做错了什么吗?