从 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 不起作用

分享它按钮不起作用 ios 7 xcode 5

从 MySQL 5.6.35 迁移到 MariaDB 10.6.3 - 查询不起作用

将核心数据模型从 OSX 迁移到 IOS

Xcode 5/iOS 7 - 本地化在模拟器中不起作用

iOS 7 Beta - 应用内测试不起作用