Перейдите по делегату сцены

#ios #swift #storyboard #uiscenedelegate

Вопрос:

Я пытаюсь отобразить раскадровку на голубом экране, но я в этом совершенно новичок. Я не понимаю, как перемещаться по классам, чтобы попасть на «синий экран», и это приводит к ошибкам.

Изображение на доске объявлений

Первоначальная идея состоит в том, чтобы распространить переменную «managedObjectContext»(CoreData) через эту функцию в SceneDelegate.

Ошибка, которую я получаю: Инициализатор для условной привязки должен иметь необязательный тип, а не » [UIViewController]»

Это моя ошибка SceneDelegate

     func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
    // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
    // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
    //guard let _ = (scene as? UIWindowScene) else { return }
    
    let mainViewController = window!.rootViewController as! UINavigationController
    
    if let navViewControllers = mainViewController.viewControllers { //error Initializer for conditional binding must have Optional type, not '[UIViewController]'
        let  controller = navViewControllers.first as! EditViewController
        controller.managedObjectContext = managedObjectContext
    }
    
    
    listenForFatalCoreDataNotifications()
    
    return
}
 

Комментарии:

1. Ошибка просто говорит вам, что if let здесь это бессмысленно. Избавься от этого.

Ответ №1:

Я решил распространить объект «managedObjectContext» через сегмент. В данном случае это сработало лучше для меня, потому что я не очень хорошо понимал, как перемещаться по раскадровке в приложении «Сцена»

     override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    switch segue.identifier! {
    case addSegueIdentifier:
        guard let navController = segue.destination as? UINavigationController,
        let saveVC = navController.topViewController as? EditViewController else {
            return
        }
        saveVC.managedObjectContext = managedObjectContext
    default:
            break
        }
}