2017-05-30 75 views
1

我发现了如下代码的经常片段,其中NSPersistentContainer在闭包中初始化并分配给变量。在闭包中调用完成处理程序的问题

但是我不认为这个代码是最优的,因为函数loadPersistentStores的完成处理程序不会与其余的代码同步执行。

这意味着storeDescription在下一行代码中创建容器后无法使用。正确?如果是这样,那可能是一个优雅的解决方案?

lazy var persistentContainer: NSPersistentContainer = { 
    let container = NSPersistentContainer(name: "Test") 
    container.loadPersistentStores(completionHandler: { (storeDescription, error) in 
     if let error = error as NSError? { 
      fatalError("Unresolved error \(error), \(error.userInfo)") 
     } 
    }) 
    return container 
}() 

回答

0
  1. 不要懒惰实例化persistentContainer但只是做了前面。
  2. 也在完成处理程序中包含相关的代码行。
  3. 与我不喜欢的商店是准备布尔东西。
  4. 保持原样,如果没有产生问题。
+0

我明白了。我有一个关于第3点的问题:如果你不喜欢这个解决方案,你为什么会这么建议? :)有什么更好的? (我也不喜欢它) – aneuryzm

+0

它是一个非常简单的解决方案,其不公平的建议,因为'优雅的解决方案'只是偏好。我已经使用了CoreData模板几次,从未遇到过这种懒惰实例化的persistantContainer的问题,我建议如果它没有问题,就让它保持原样。 – Simon

相关问题