SceneDelegate传递managedObjectContext时出现非可选类型报错如何解决?
问题解决方法
报错原因
UINavigationController的viewControllers属性本身是非可选的[UIViewController]类型,不需要用if let进行可选绑定,对非可选值执行可选绑定操作就会触发本次编译错误。
修正方案
为了避免强制解包、强制类型转换带来的运行时崩溃风险,建议优化代码的安全校验逻辑,修正后可运行的代码如下:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { // 安全校验层级关系,避免异常崩溃 guard let _ = (scene as? UIWindowScene), let window = self.window, let navController = window.rootViewController as? UINavigationController else { return } // 直接访问导航栈控制器数组,安全转换为目标类型后赋值 if let targetController = navController.viewControllers.first as? EditViewController { targetController.managedObjectContext = managedObjectContext } listenForFatalCoreDataNotifications() }
层级定位补充说明
如果你要找的蓝色视图不是导航控制器的根控制器,可以遍历navController.viewControllers数组,通过类名匹配找到你需要的目标控制器后再传递参数即可。
内容的提问来源于stack exchange,提问作者Omairys
相关产品推荐
相关产品推荐

