2012-09-14 37 views
23

Problema: Si el usuario no ha iniciado sesión en la cuenta de GameCenter: la vista de autenticación de GameCenter se inicia en modo vertical (en ios 5 había un cuadro de diálogo modal) solicitando iniciar sesión. Pero si desactivar el modo de retrato en Xcode (Resumen del proyecto) o en supportedInterfaceOrientationsForWindow: (como mi aplicación supone para funcionar en modo horizontal SOLAMENTE) me sale:Autenticación de GameCenter en aplicación solo horizontal lanza UIApplicationInvalidInterfaceOrientation

terminación de aplicación debido a excepción no detectada 'UIApplicationInvalidInterfaceOrientation', razón: 'orientaciones admitido tiene no hay orientación común con la aplicación, y shouldAutorotate está devolviendo SÍ '

Si habilito Portrait para ipad/iphone (y/o comentario supportedInterfaceOrientationsForWindow :) funciona sin bloqueos, pero no quiero habilitar el modo retrato.

+0

Sé que ha encontrado una solución, pero esto parece un error y debe presentarla en Apple en http://bugreporter.apple.com –

+0

Es un problema conocido que se detalla en las [Notas de la versión de iOS 6.0] (https : //developer.apple.com/library/ios/#releasenotes/General/RN-iOSSDK-6_0/_index.html) en Game Center. [Esta respuesta] (http://stackoverflow.com/a/12560069/1719) tiene la solución oficial. – voyce

Respuesta

27

Al escribir esta pregunta y experimentar con el código, parece que encontré una solución: habilite todas las orientaciones en el resumen del proyecto y elimine la aplicación: supportedInterfaceOrientationsForWindow.

añadir este código a ViewController:

- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskLandscape; 
} 

ahora funciona sin problemas.

+0

+1 para documentar la solución –

+1

Pero esto no funciona en mi simulador iOS 6. –

+0

¿Cómo exactamente? Tal vez has olvidado algo? ¿Resumen? O tal vez tienes muchas vistas (mientras que solo tengo una, ya que mi aplicación usa la vista OpenGL). – Tertium

1

He encontrado que el problema proviene del Game Center en mi caso. Cuando en el simulador todavía no tengo Game Center inicializado, me gustaría mostrar la vista de inicio de sesión, pero en modo vertical. Una vez que está llegando a este punto, se bloquea si desactivo la orientación vertical. Extraño error en el sistema operativo ya que Game Center debería tomar las orientaciones permitidas solo para estar en línea con nuestra intención de interfaz de usuario de paisaje.

Todavía no tengo la solución, pero la publicaré si la encuentro.

+1

Sí, como está escrito en el problema del título de la publicación, aparece en "Autenticación de GameCenter en modo horizontal". Parece que GC simplemente no tiene recursos de paisaje para la pantalla de autenticación para iphone en iOS6, por lo que sospecho que no encontrará una solución real, solo la solución descrita aquí. Es por eso que debes permitir que la aplicación se inicie en modo retrato cuando GC lo desee, pero se niega el retrato en tu vista principal, si no quieres el retrato, por supuesto. Por cierto, no hay tal problema en ipad en ios6. – Tertium

6

Añadir al delegado de la aplicación:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)w { 

return (NSUInteger)[application supportedInterfaceOrientationsForWindow:w] | (1<<UIInterfaceOrientationPortrait); 

} 
0

tuve el mismo problema que usted y yo fijo que con un trabajo un poco, feo alrededor, básicamente, tengo una variable global en mi aplicación que utilizo para elegir qué las orientaciones de interfaz válidas son. En el

- (NSInteger)application : (UIApplication *)supportedInterfaceOrientationsForWindow:(UIWindow *)window{ 
      if(orientationIndicator == 1){ 
       return UIInterfaceOrientationMaskAllButUpsideDown; 
      } 
      else if(orientationIndicator == 2){ 
       return UIInterfaceOrientationMaskLandscape; 
      } 
    } 

Declarar la variable global poner esto en su archivo appDelegate.m:

  int orientationIndicator = 1; 

Para importar el uso de variables globales:

  extern int orientationIndicator; 

A continuación, puede cambiar el valor del indicador de orientación y le permitirá ejecutar en diferentes tipos de interfaz. Entonces, lo que hice fue comenzar haciendo el orientationIndicator = 1. Cuando autenticas un jugador e inicias el controlador de vista de inicio de sesión, configura el indicador de orientación en 2. Cuando descartas la vista (autenticas el reproductor) entonces puedes volver a cambiarlo a 1

Esto es un trabajo viscoso pero me ha funcionado.

Espero que esto ayude!

0

La captura la excepción parece funcionar muy bien para mí:

@try { 
    [rootNavigationController pushViewController:viewController animated:YES]; 
} 
@catch (NSException *exception) { 
    //somehow, catching this exception just allows the view controller to be shown? 
} 

En iOS 6.0, se produce la excepción, pero si se detecta a continuación, se seguirá mostrando el viewController y GameCenter se comportará como se espera en orientación horizontal.

Una solución alternativa es solo para apuntar a iOS 6.1 y superior, ya que Apple solucionó el error en esa versión.

Cuestiones relacionadas