在闭包内调用完成处理程序的问题
Posted
技术标签:
【中文标题】在闭包内调用完成处理程序的问题【英文标题】:Issue with a completion handler called inside a closure 【发布时间】:2017-05-30 17:11:18 【问题描述】:我经常发现像下面的代码这样的 sn-ps,其中 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
()
【问题讨论】:
【参考方案1】:-
不要懒惰地实例化persistentContainer,而是早点做。
在完成处理程序中也包含相关的代码行。
我个人不喜欢带有 store-is-ready-bool 的东西。
如果不产生问题,请保持原样。
【讨论】:
我明白了。我对第 3 点有疑问:如果你个人不喜欢这个解决方案,你为什么建议它? :) 有更好的吗? (我也不喜欢) 这是一个非常简单的解决方案,不建议它是不公平的,因为“优雅的解决方案”只是偏好。我已经使用过几次 CoreData 模板,并且从来没有遇到过这个懒惰实例化的持久容器的问题,如果它没有问题,我建议就这样离开它。以上是关于在闭包内调用完成处理程序的问题的主要内容,如果未能解决你的问题,请参考以下文章