【发布时间】:2019-02-17 06:12:40
【问题描述】:
我刚开始从事一个新项目,我想试试 Core Data 的 NSPersistentContainer,而不是编写自己的堆栈。
我刚刚偶然发现了这个问题,如果该任务是作为NSPersistentContainer 的performBackgroundTask 的一部分启动的,那么调用managedObjectContext 的perform 方法实际上没有任何作用。
这是我目前为演示该问题所做的工作的简要说明。请注意,我有一个DispatchGroup 以确保任务按顺序执行。
// DataImporter.swift
class func importData(url: URL, context: NSManagedObjectContext, completion: () -> ()) {
context.perform {
// Code inside here never gets call
DispatchQueue.main.async(execute: {
completion()
})
}
}
// ViewController.swift
func multipleImportTasks() {
persistentContainer.performBackgroundTask { managedObjectContext in
let group = DispatchGroup()
group.enter()
let fileUrl1 = Data(someData)
DataImporter.importData(fileUrl1, context: managedObjectContext, completion: {
group.leave()
})
group.wait()
group.enter()
let fileUrl2 = Data(someData)
DataImporter.importData(fileUrl2, context: managedObjectContext, completion: {
group.leave()
})
group.notify(queue: DispatchQueue.main, execute: {
print("all done")
})
}
}
【问题讨论】:
标签: core-data grand-central-dispatch nspersistentcontainer