Как правильно передать NSPersistentContainer в UIWindowSceneDelegate? - PullRequest
0 голосов
/ 09 июня 2019

Прямо сейчас я обращаюсь к NSPersistentContainer через синглтон UIApplication для передачи на главный контроллер, но должен быть более удобный способ передачи данных из AppDelegate в SceneDelegate, который в данном случае NSPersistentContainer.Возможно с помощью метода конфигурации для подключения?

AppDelegate.swift

import UIKit
import CoreData

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }

SceneDelegate.swift

import UIKit

class SceneDelegate: UIResponder, UIWindowSceneDelegate, UISplitViewControllerDelegate {var window: UIWindow?

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

    let splitViewController = window?.rootViewController as! UISplitViewController
    let navigationController = splitViewController.viewControllers[splitViewController.viewControllers.count-1] as! UINavigationController
    navigationController.topViewController!.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem
    splitViewController.delegate = self
    let masterNavigationController = splitViewController.viewControllers[0] as! UINavigationController
    let controller = masterNavigationController.viewControllers.first as! MasterViewController

    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let persistentContainer = appDelegate.persistentContainer
    controller.managedObjectContext = persistentContainer.viewContext
}

Info.plist

<dict>
    <key>UISceneClassName</key>
    <string>UIWindowScene</string>
    <key>UISceneDelegateClassName</key>
    <string>SceneTest.SceneDelegate</string>
    <key>UISceneConfigurationName</key>
    <string>Default</string>
    <key>UILaunchStoryboardName</key>
    <string>LaunchScreen</string>
    <key>UISceneStoryboardFile</key>
    <string>Main</string>
</dict>
</plist>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...