Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在将UITabBarController设置为根视图控制器时,如何修复应用程序委托中的“意外发现零”_Ios_Swift_Xcode - Fatal编程技术网

Ios 在将UITabBarController设置为根视图控制器时,如何修复应用程序委托中的“意外发现零”

Ios 在将UITabBarController设置为根视图控制器时,如何修复应用程序委托中的“意外发现零”,ios,swift,xcode,Ios,Swift,Xcode,根据屏幕截图,我试图将UITabBarController设置为我的根视图控制器。在故事板中,UITabBarController是我最初的VC,但是我遇到了这个问题 我检查序列图像板上的选项卡栏控制器是否是我的初始视图控制器,以及我是否在展开任何内容时出错 let tabController = window!.rootViewController as! UITabBarController if let tabViewControllers = tabCon

根据屏幕截图,我试图将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。

这是一种丑陋的做法。。。 为了超级安全,请执行以下操作:

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评论说窗口为零。