只有横向应用程序中的GameCenter身份validation会引发UIApplicationInvalidInterfaceOrientation
问题:如果用户没有login到GameCenter帐户 – GameCenter身份validation视图以纵向模式启动(在ios 5中有一个模式对话框)要求login。但是,如果我在xcode(项目摘要)或supportedInterfaceOrientationsForWindow禁用纵向模式: (因为我的应用程序应该只在横向模式下运行)我得到:
由于未捕获exception“UIApplicationInvalidInterfaceOrientation”而终止应用程序,原因:“支持的方向与应用程序没有共同的方向,并且shouldAutorotate返回YES”
如果我启用肖像的iPad / iPhone(和/或注释supportedInterfaceOrientationsForWindow :)它的工作原理没有崩溃,但我不想纵向模式启用。
在写这个问题并尝试使用代码时,似乎find了一个解决scheme:在项目摘要中启用所有方向,并移除应用程序:supportedInterfaceOrientationsForWindow。
将此代码添加到ViewController:
- (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; }
现在它可以无缝工作。
添加到应用程序委托:
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)w { return (NSUInteger)[application supportedInterfaceOrientationsForWindow:w] | (1<<UIInterfaceOrientationPortrait); }
我发现问题来自于我的游戏中心。 在模拟器中,我还没有初始化Game Center,它想popuplogin视图,但是在纵向模式下。 一旦达到这一点,如果我不允许纵向方向,它会崩溃。 作为Game Center的操作系统中的奇怪的错误应该只允许允许的方向与我们的景观用户界面的意图一致。
我还没有解决scheme,但如果我find它,我会发布。
我和你有同样的问题,我用一个有点丑陋的工作来解决它,基本上我的应用程序中有一个全局variables,用于select有效的接口方向。 在里面
- (NSInteger)application : (UIApplication *)supportedInterfaceOrientationsForWindow:(UIWindow *)window{ if(orientationIndicator == 1){ return UIInterfaceOrientationMaskAllButUpsideDown; } else if(orientationIndicator == 2){ return UIInterfaceOrientationMaskLandscape; } }
声明这个全局variables把它放在你的appDelegate.m文件中:
int orientationIndicator = 1;
要导入全局variables,请使用:
extern int orientationIndicator;
然后,您可以更改方向指示器的值,并允许您以不同的界面types运行。 所以我做的是我首先使orientationIndicator = 1。当你authentication一个玩家并启动login视图控制器时,将方向指示器设置为2.当你closures视图(authentication玩家)时,你可以把它改回1 。
这是一个粘糊糊的工作,但它已经为我工作。
希望这可以帮助!
捕捉exception似乎对我来说很好:
@try { [rootNavigationController pushViewController:viewController animated:YES]; } @catch (NSException *exception) { //somehow, catching this exception just allows the view controller to be shown? }
在iOS 6.0中,抛出了exception,但是如果你抓住它,那么viewController仍然会显示出来,并且GameCenter将在横向方向上按预期行事。
另一个解决scheme就是针对iOS 6.1及更高版本,因为苹果公司通过该版本修正了这个错误。