Я только начал работать над новым проектом и решил попробовать Core Data NSPersistentContainer
вместо того, чтобы писать свой собственный стек.
Я только что наткнулся на эту проблему, когда вызов perform
метода managedObjectContext
фактически ничего не делает, если задача была запущена как часть NSPersistentContainer
performBackgroundTask
.
Вот фрагмент того, что я сейчас делаю, чтобы продемонстрировать проблему.Обратите внимание, что у меня есть 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")
})
}
}