Ios 在将UITabBarController设置为根视图控制器时,如何修复应用程序委托中的“意外发现零”
根据屏幕截图,我试图将UITabBarController设置为我的根视图控制器。在故事板中,UITabBarController是我最初的VC,但是我遇到了这个问题 我检查序列图像板上的选项卡栏控制器是否是我的初始视图控制器,以及我是否在展开任何内容时出错Ios 在将UITabBarController设置为根视图控制器时,如何修复应用程序委托中的“意外发现零”,ios,swift,xcode,Ios,Swift,Xcode,根据屏幕截图,我试图将UITabBarController设置为我的根视图控制器。在故事板中,UITabBarController是我最初的VC,但是我遇到了这个问题 我检查序列图像板上的选项卡栏控制器是否是我的初始视图控制器,以及我是否在展开任何内容时出错 let tabController = window!.rootViewController as! UITabBarController if let tabViewControllers = tabCon
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。这是一种丑陋的做法。。。 为了超级安全,请执行以下操作:
guard let tabController = window!.rootViewController as? UITabBarController else { return }
let viewControllers = tabControllers.viewControllers
if let navController = viewControllers.first as? UINavigationController {
if let controller = navController.viewControllers.first as? CurrentLocationViewController {
controller.managedObjectContext = managedObjectContext
}
}
该行正在崩溃,因为要么窗口为零,要么视图控制器不是UITabBarController。如果您删除didFinishLaunchingWithOptions中的代码,您的应用程序是否会加载而不崩溃并显示您期望的视图控制器 如果是这样,可以尝试移动代码以在CurrentLocationViewController的viewDidLoad方法内设置托管对象上下文:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
managedObjectContext = appDelegate.managedObjectContext
如果应用程序仍然崩溃或未显示您期望的选项卡式视图控制器,则您可能没有正确设置初始视图控制器。您确实在许多地方强制展开。很难说问题出在哪里。请在哪一行发布应用程序崩溃。@TejaNandamuri应用程序在哪一行崩溃:let tabController=window!。rootviewcontrolleras!UITabBarControlleryour rootController不是tabController…可能是因为窗口为零。显示您已将值设置为窗口参数的代码?我仍在学习,因此可能是错的,但我开始是作为一个单一视图应用程序,然后添加控制器,然后通过情节提要将控制器嵌入选项卡栏控制器中,这会将其设置为根吗?还是我遗漏了什么?这只是为了防止撞车。它实际上并没有解决问题。OP评论说窗口为零。