私のアプリは、Game Center で正常に認証されたかどうかの記録を保持しています。新しいゲームを開始するとき、またはユーザーがスコア リストを見たときに、ローカル プレーヤーが正常に認証されていない場合、およびその時点でアプリがユーザーの認証を試みている最中でない場合は、再試行します。 .
(理由は? 非ネットワーク ゾーンからネットワーク ゾーンに移動した場合)。
残念ながら、iOS6/XCode 4.5 では、クラッシュし始めました。または、少なくとも特定の限られた状況ではそうであるように思われます: ユーザーが間違ったパスワードや存在しないアカウントでログインに失敗した場合。ログインに成功すると、すべてがうまくいきます。
ログインに失敗した後、再認証チェックを発生させるようなことをすると、次のようになります。
2012-09-25 15:54:47.829 アプリ名 [1493:907] * -[UIWindowController transition:fromViewController:toViewController:target:didEndSelector:]、/SourceCache/UIKit/UIKit-2372/UIWindowController.m:211 でのアサーションの失敗
次に、これは実際にクラッシュします:
2012-09-25 15:55:25.569 アプリ名 [1493:907] * キャッチされていない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。移行はすでに進行中です。Wait for viewDidAppear/viewDidDisappear to know the current transition has completed' * First throw call stack: (0x394932a3 0x31db297f 0x3949315d 0x383fd2af 0x3640377b 0x36402fcf 0x394969c4 0x393edfeb 0x36521733 0x32a83d2d 0x3264b11f 0x3264a4b7 0x3264f1bd 0x39466f3b 0x393d9ebd 0x393d9d49 0x353132eb 0x3636b301 0x7e863 0x7e808) libc++abi.dylib: terminate called例外を投げる
これは厄介なコードです:
-(void)authenticateLocalUser {
if (!self.checkingLocalPlayer) {
self.checkingLocalPlayer = YES;
GKLocalPlayer *thisPlayer = [GKLocalPlayer localPlayer];
if (!thisPlayer.authenticated) {
[[GKLocalPlayer localPlayer]
authenticateWithCompletionHandler:^(NSError *error)
{
[self finishGameCenterAuthWithError:error];
}
];
}
}
}
ここで何が間違っているのか分かりますか?