#ios #swift #storyboard #uiscenedelegate
Вопрос:
Я пытаюсь отобразить раскадровку на голубом экране, но я в этом совершенно новичок. Я не понимаю, как перемещаться по классам, чтобы попасть на «синий экран», и это приводит к ошибкам.
Изображение на доске объявлений
Первоначальная идея состоит в том, чтобы распространить переменную «managedObjectContext»(CoreData) через эту функцию в SceneDelegate.
Ошибка, которую я получаю: Инициализатор для условной привязки должен иметь необязательный тип, а не » [UIViewController]»
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
}
}