在iOS 9中设置UIWindow rootViewController后,iOS应用程序崩溃

时间:2015-09-26 08:50:54

标签: ios objective-c crash

我的应用程序运行良好,直到在iOS 9上运行它。

在AppDelegate中,我检查用户是否已登录。如果他们没有登录,我会使用以下行将其发送到登录屏幕:

self.window.rootViewController = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:@"Login"];

用户登录后,我尝试使用以下行将它们发送到主应用程序:

self.window.rootViewController = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:@"Tabs"];

这适用于iOS 8,但现在它崩溃了应用程序。这是一次糟糕的撞车事故。整个设备必须重新启动(虽然它非常快,所以我认为它更像是SpringBoard重启或其他东西)。

我真的很不知道为什么第一行有效,第二行没有。非常感谢任何帮助!

修改

我最终重新创建了崩溃的整个UIViewController流程,现在工作正常。据我所知,这是新Xcode中的一个奇怪的错误。不考虑这个答案,所以如果有人有真正的答案,那么随时分享。

2 个答案:

答案 0 :(得分:0)

不知道为什么,但这适用于iOS9。在窗口正确加载之前,你可能已经在AppDelegate中尝试这样做了吗?

我在故事板中有第一个ViewController,而是重定向到那里。

UIViewController *viewController = [[UIStoryboard storyboardWithName:@"Storyboard"
                                                          bundle: nil] instantiateViewControllerWithIdentifier:@"viewController"];

[[[[UIApplication sharedApplication] delegate] window] setRootViewController:viewController];

答案 1 :(得分:0)

设置根视图控制器的代码可以在iOS9中正常运行。

  

[[[[UIApplication sharedApplication] delegate] window] setRootViewController:viewController];

如果你在该行中遇到崩溃,那肯定意味着viewController初始化逻辑或其任何子视图在某个时刻都在抛出。

问题是,在模拟器中工作,应用程序将崩溃,输出中没有错误。这里要做的最好的事情是在viewController逻辑中设置断点(即:viewDidLoad)并检查导致错误的行。