ios - 将 UITabBarController 设置为根视图控制器时如何在应用程序委托中修复“意外发现 nil”
问题描述
在此处输入图像描述根据屏幕截图,我试图将 UITabBarController 设置为我的根视图控制器。在故事板中,UITabBarController 是我最初的 VC,但是我遇到了这个问题。
如果标签栏控制器是我的初始视图控制器,我检查情节提要,如果我搞砸了任何东西。
let tabController = window!.rootViewController as! UITabBarController
if let tabViewControllers = tabController.viewControllers {
let navController = tabViewControllers[0] as! UINavigationController
let controller = navController.viewControllers.first as! CurrentLocationViewController
controller.managedObjectContext = managedObjectContext
}
return true
}
预期:要顺利运行实际结果:应用程序启动,启动时崩溃。我收到以下错误:线程一个致命错误:在展开可选时意外发现 nil。
解决方案
该行正在崩溃,因为窗口为 nil 或视图控制器不是 UITabBarController。如果您删除 didFinishLaunchingWithOptions 中的代码,您的应用程序是否会在不崩溃的情况下加载并显示您期望的视图控制器?
如果是这样,也许可以尝试移动代码以在 CurrentLocationViewController 的 viewDidLoad 方法中设置托管对象上下文:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
managedObjectContext = appDelegate.managedObjectContext
如果应用程序仍然崩溃或未显示您期望的选项卡式视图控制器,则您可能没有正确设置初始视图控制器。
推荐阅读
- javascript - Add multiple properties at once, to object which already has some properties defined
- c# - 为什么我的 XAML 向我抛出 Storyboard 对象引用错误?
- java - 在 OpenTSDB 中找不到指标 - 原因:net.opentsdb.uid.NoSuchUniqueName:“指标”没有这样的名称
- c# - 如何获取要在 UWP 中发送的文件字节数?
- azure - Azure -“Blob 存储”中的文件夹和“文件存储”中的文件夹
- c++ - 从 C++ 中的文本文件中读取两个十六进制值
- git - 如何更新 git 中的文件以使 GitHub PR 不会显示它已更改?
- java - 调用 Url 方法之前的 Spring MVC
- r - 改进从句子中检测“she”和“her”等单词并返回“Female”
- linux - 排序在 bash 脚本中不起作用