从 iOS 5 迁移到 iOS 7:轮换不起作用
Posted
技术标签:
【中文标题】从 iOS 5 迁移到 iOS 7:轮换不起作用【英文标题】:Migration from iOS 5 to iOS 7: rotation not working 【发布时间】:2014-02-28 02:04:57 【问题描述】:这两天我正在开发 ios 应用程序来解决轮换问题,但没有成功。我在互联网上到处搜索以找到任何解决方案,但找不到任何可以修复我的应用轮换的东西。
我已将 iOS 6 中引入的所有新功能添加到我的 AppDelegate 类中。
这是我在 AppDelegate 中的代码。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
[self.window addSubview:tabBarController.view];
[self.window makeKeyAndVisible];
HomeViewController *controller;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
controller = [[HomeViewController alloc] initWithNibName: @"iPadHomePage" bundle: nil];
else
controller = [[HomeViewController alloc] initWithNibName: @"HomePage" bundle: nil];
NSMutableArray *controllers = [[NSMutableArray alloc] init];
[controllers addObject:controller];
navController.viewControllers = controllers;
return YES;
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
return YES;
- (BOOL)shouldAutorotate
return YES;
- (NSUInteger)supportedInterfaceOrientations
return UIInterfaceOrientationMaskAll;
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
return UIInterfaceOrientationPortrait;
当我用谷歌搜索时,我发现我不应该使用 [self.window addSubview:tabBarController.view]
,因为这不适用于 iOS 6,所以我在 AppDelegate 类中将其替换为 [self.window setRootViewController:tabBarController]
,但随后在主类中出现错误。
由于未捕获的异常“NSUnknownKeyException”而终止应用程序, 原因:'[setValue:forUndefinedKey:]: 此类与键 labelName 的键值编码不兼容
我错过了什么?
【问题讨论】:
你搜索过这个错误吗? ***.com/… @rmaddy,是的,我有,但是如果我使用 [self.window addSubview:tabBarController.view] 而不是 [self.window setRootViewController:tabBarController] 我只会收到错误已经检查了我的代码和 xib 文件,我没有重命名或删除任何属性或任何实例变量。 但是您不应该将调用addSubview
用于您的主视图。
但是 addSubView 到目前为止一直在工作,当我很久以前使用 iOS 5 构建应用程序时,我现在知道通过 iOS 6 的发布我必须使用 [self.window setRootViewController:tabBarController] 这就是我正在尝试做的事情,在这里讨论过***.com/questions/13923788/ios-6-rotation-not-working,但不知何故它对我不起作用。我知道我错过了什么,但不确定是什么。
【参考方案1】:
那次崩溃与轮换无关。似乎在您的笔尖中,您已将一个元素(可能是标签)连接到代码中不再存在的插座。您可能删除了名为“labelName”的属性或实例变量,但忘记在界面生成器中删除连接。
【讨论】:
我删除所有连接,错误消失,但是当我再次添加连接时,错误再次出现。我尝试添加一个新的 textField 并使用助手编辑器创建连接,然后我又遇到了同样的错误。【参考方案2】:这个方法应该添加到你的 tabbarController.m 中:
- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation
return YES;
- (BOOL)shouldAutorotate
return YES;
- (NSUInteger)supportedInterfaceOrientations
return UIInterfaceOrientationMaskAll;
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
return UIInterfaceOrientationPortrait;
这个错误“由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[setValue:forUndefinedKey:]:这个类不符合键labelName的键值编码”,我猜是你的tabbarController.view` s xib 链接 tabbarcontroller 中不存在的 IBOutlet。
希望对你有帮助
【讨论】:
【参考方案3】:我终于找到了问题所在。
用[self.window setRootViewController:tabBarController]
替换代码[self.window addSubview:tabBarController.view]
是不够的,顺序也很重要。我将[self.window setRootViewController:tabBarController]; [self.window makeKeyAndVisible]
移动到return YES;
之前的末尾,现在一切正常。 IBOutlet 和标签之间的连接没有问题,.....
正确的代码是:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
HomeViewController *controller;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
controller = [[HomeViewController alloc] initWithNibName: @"iPadHomePage" bundle: nil];
else
controller = [[HomeViewController alloc] initWithNibName: @"HomePage" bundle: nil];
NSMutableArray *controllers = [[NSMutableArray alloc] init];
[controllers addObject:controller];
navController.viewControllers = controllers;
//this is the fix, by moving this 2 lines here
[self.window setRootViewController:tabBarController];
[self.window makeKeyAndVisible];
return YES;
【讨论】:
以上是关于从 iOS 5 迁移到 iOS 7:轮换不起作用的主要内容,如果未能解决你的问题,请参考以下文章
迁移到 Xcode 7 后 UIAlertView 和 UIWebView 不起作用