核心数据:在加载持久性容器时使用占位符VC是否有好处,还是可以忽略回调,除非出现错误?

我正在阅读objc.io核心数据书,他们使用以下代码来设置其持久性容器:

func createContainer(completion: @escaping (NSPersistentContainer) -> ()) {
    let container = NSPersistentContainer(name: "DataModel")
    container.loadPersistentStores { _,error in
        guard error == nil else { fatalError("Unable to load persistent store: \(error!)") }
        DispatchQueue.main.async { completion(container) }
    }
}

(摘自第1章,示例here

他们添加了一个空白的占位符视图控制器作为初始视图控制器,并在容器加载后使用AppDelegate.swift中的以下代码将其替换为根视图控制器:

func application(_:didFinishlaunchingWithOptions:) -> Bool {
   createContainer { container in
        self.persistentContainer = container
        let storyboard = self.window?.rootViewController?.storyboard
        guard let vc = storyboard?.instantiateViewController(withIdentifier: "RootVC") as? RootVC
            else { fatalError("Cannot instantiate root view controller") }
        vc.managedobjectcontext = container.viewContext
        self.window?.rootViewController = vc
    }
    return true
}

与苹果公司在其Core Data documentation中建议的方式相比,这样做有什么好处:

lazy var persistentContainer: NSPersistentContainer = {        
    let container = NSPersistentContainer(name: "DataModel")
    container.loadPersistentStores { description,error in
        if let error = error {
            fatalError("Unable to load persistent stores: \(error)")
        }
    }
    return container
}()

我更喜欢Apple的方式,因为它不需要创建占位符视图控制器就可以将占位符VC与应用程序的根VC交换出去。 objc.io的方式是否过时?与使用懒惰的var而不等待回调来返回容器相比,等待回调完成有好处吗?

addsion 回答:核心数据:在加载持久性容器时使用占位符VC是否有好处,还是可以忽略回调,除非出现错误?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3071091.html

大家都在问