Mi aplicación mantiene un registro de si se ha autenticado correctamente con Game Center. Cuando comienza un nuevo juego o cuando el usuario mira la lista de puntajes, si un jugador local no se ha autenticado con éxito y si la aplicación no está en el medio de tratar de autenticar a un usuario en ese momento, intenta de nuevo .GKLocalPlayer Auth Crash en iOS6 con error de transición modal
(¿Por qué? En caso de que haya movido de una zona de exclusión de red a una zona de la red.)
Desafortunadamente, bajo iOS6/XCode 4.5, que ha comenzado estrellarse. O al menos parece que en ciertas circunstancias limitadas: cuando un usuario no puede iniciar sesión con una contraseña incorrecta y/o una cuenta que no existe. En un inicio de sesión exitoso, todo está bien.
Después de ese inicio de sesión fallido, cuando voy y hago algo que causa un cheque reauth que ocurra me sale esto:
2012-09-25 15: 54: 47.829 APP NOMBRE [1493: 907] * fracaso aserción en - [UIWindowController transición: fromViewController: toViewController: objetivo: didEndSelector:], /SourceCache/UIKit/UIKit-2372/UIWindowController.m:211
Entonces este se bloquea en realidad:
2012-09-25 15: 55: 25.569 APP NOMBRE [1493: 907] * Terminación de aplicación debido a excepción no detectada 'NSInternalInconsistencyException', razón: 'El intento de iniciar una transición modal de la < GKModalRootViewController : 0x1cd8b2a0 > a < GKHostedAuthenticateViewController: 0x1e31a350 > mientras que una transición es ya en progreso. Esperar a que viewDidAppear/viewDidDisappear saber la transición actual ha completado' * primer tiro pila de llamadas: (0x394932a3 0x31db297f 0x3949315d 0x383fd2af 0x3640377b 0x36402fcf 0x394969c4 0x393edfeb 0x36521733 0x32a83d2d 0x3264b11f 0x3264a4b7 0x3264f1bd 0x39466f3b 0x393d9ebd 0x393d9d49 0x353132eb 0x3636b301 0x7e863 0x7e808) libC++ ABI .dylib: Terminar llamada lanzar una excepción
Este es el código problemático:
-(void)authenticateLocalUser {
if (!self.checkingLocalPlayer) {
self.checkingLocalPlayer = YES;
GKLocalPlayer *thisPlayer = [GKLocalPlayer localPlayer];
if (!thisPlayer.authenticated) {
[[GKLocalPlayer localPlayer]
authenticateWithCompletionHandler:^(NSError *error)
{
[self finishGameCenterAuthWithError:error];
}
];
}
}
}
un ¿Idea lo que estoy haciendo mal aquí?
Este fue de hecho el problema. Tengo algunos comentarios adicionales cerca como otra respuesta. –
Sí, gracias por la construcción en el ios 6 vs otro. También creo que presentModalViewController también está en la lista de cortes para ios 6. –