La autenticación de GameCenter en la aplicación solo paisaje lanza UIApplicationInvalidInterfaceOrientation

Problema: si el usuario no está conectado a la cuenta GameCenter, la vista de autenticación GameCenter se inicia en modo retrato (en ios 5 había un cuadro de diálogo modal) solicitando iniciar sesión. Pero si deshabilito el modo vertical en xcode (Resumen del proyecto) o en supportedInterfaceOrientationsForWindow: (como mi aplicación se supone que se ejecute en modo horizontal SOLAMENTE) obtengo:

Finalización de la aplicación debido a la excepción no detectada ‘UIApplicationInvalidInterfaceOrientation’, razón: ‘Orientaciones admitidas no tienen una orientación común con la aplicación, y shouldAutorotate está respondiendo SÍ’

Si habilito Portrait para iPad / iPhone (y / o comment supportedEnterfaceOrientationsForWindow :), funciona sin locking, pero no quiero habilitar el modo retrato.

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

Agregue este código a ViewController:

- (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } 

Ahora funciona a la perfección.

Agregar al delegado de la aplicación:

 - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)w { return (NSUInteger)[application supportedInterfaceOrientationsForWindow:w] | (1< 

Descubrí 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.

Aún no tengo la solución, pero la publicaré si la encuentro.

Tuve el mismo problema que tú y lo solucioné con un poco de trabajo feo, básicamente tengo una variable global en mi aplicación que utilizo para elegir cuáles son las orientaciones válidas de la interfaz. En el

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

Para declarar la variable global ponga esto en su archivo appDelegate.m:

  int orientationIndicator = 1; 

Para importar la variable global use:

  extern int orientationIndicator; 

Luego 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 orientationIndicator = 1. Cuando autenticas un reproductor 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), puedes volver a cambiarlo a 1 .

Este es un trabajo viscoso pero me ha funcionado.

¡Espero que esto ayude!

Alcanzar la excepción parece funcionar 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 lanza la excepción, pero si la detecta, se seguirá mostrando viewController y GameCenter se comportará como se espera en orientación horizontal.

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