2012-06-20 7 views
7

Estoy ejecutando Xcode 4.3.3 y me estoy dirigiendo a iOS 5.1. Estoy intentando incluir la funcionalidad de Game Center en un juego.Comportamiento extraño de GameKit. ¿Alguien más está viendo esto?

Cuando la autenticación del GKLocalPlayer el usuario se presenta con el Entra a Game Center vista de alertas o muestra que estar conectado. Hasta ahora todo esto está bien, pero si el usuario presiona el Crear Cuenta Nueva botón y luego cualquier punto de vista modal abiertas se mueven detrás del controlador de vista raíz y el siguiente error se escupen desde la consola:

llamadas no balanceadas para comenzar/transiciones de apariencia final de < GKModalRootViewController: dirección de memoria >.

He intentado mover el código de autenticación GKLocalPlayer entre el delegado de la aplicación y el controlador de la vista raíz. También intenté implementar la autenticación en un nuevo proyecto en blanco. Lo he intentado con y sin Storyboards y ARC. En todos estos casos, los resultados fueron los mismos: modales ocultos detrás del controlador de vista raíz y error dado.

Aquí es el método de autenticación GKLocalPlayer estoy llamando desde aplicación mi aplicación de delegado: didFinishLaunchingWithOptions: método:

- (void)authenticateLocalPlayer 
{ 
    GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; 
    [localPlayer authenticateWithCompletionHandler:^(NSError *error) { 
     if (localPlayer.isAuthenticated) { 
      // Perform additional tasks for the authenticated player. 
     } else { 
      // Disable Game Center features. 
     } 
     if (error) { 
      // Handle error. 
     } 
    }]; 
} 

Here es una captura de pantalla de la misma. En esta imagen, el controlador de vista raíz tiene un fondo con un valor alfa del 50%. El modal ha sido empujado detrás del controlador de vista raíz por este error.

This stackoverflow question contiene la única referencia a este error (con respecto a GKModalRootViewController) que puedo encontrar, y no cabe porque (a.) No estoy usando cocos2d. (b.) Sucede si realizo o no una transición, y no estoy tocando viewWillAppear: o viewDidAppear :. (c.) No se dio una respuesta aceptable.

This question y this one parecen implicar el mismo problema (con la jerarquía de vista destruida) pero no se responden y no mencionan el mensaje de error de la consola.

¿Le sucede esto a alguien más? ¿Alguna idea de qué puede estar causando esto?

ACTUALIZACIÓN 1: Llegué a poner el código de autenticación en una IBAcción conectada a un botón en la vista modal para evitar conflictos de inicialización. No ayudó.

ACTUALIZACIÓN 2: Intenté mover el código de autenticación a una cola de fondo de GCD. Los resultados fueron los mismos.

Here es el proyecto de prueba (que está listo para GameCenter con el ID de paquete de mi aplicación ya ingresado).

Para probar:

  1. Desconectar del centro de juego en la prueba del dispositivo/simulador (si está conectado).
  2. Crea y ejecuta la aplicación.
  3. Presione el botón de información.
  4. Presione Autentique.
  5. Cuando aparezca la alerta Iniciar sesión en Game Center, presione Crear nueva cuenta .
  6. Presione Cancelar.
  7. ¿Apareció el mensaje "Llamadas no balanceadas ..." en la consola? ¿Desapareció la vista modal (con el botón Autenticar)?
  8. Presione el botón de información.
  9. ¿Se mostró de nuevo el modo modal?
+1

¿Sigue experimentando este problema? – NathanChristie

+0

El problema persiste en iOS 5.1.1, sin embargo iOS 6 resolvió el problema. – Endersstocker

Respuesta

2

Este error aparece en la lista de "errores corregidos por Apple en 6.0". Entiendo que le encantaría una solución alternativa, pero cuando las API de las que depende son defectuosas, las posibilidades son escasas.

Sin embargo, puede alegrarse de que los usuarios 5.x estén muriendo lentamente.

Lo mejor de la suerte con su aplicación.