我有个关于处理父母和孩子的问题
NSManagedObjectContexts
.
我创建了主上下文(XCode在
CoreData
项目)可访问如下:
App.managedObjectContext
context
要在显示和编辑某些数据的详细视图中使用,例如:
let context = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
context.parent = App.managedObjectContext
context.automaticallyMergesChangesFromParent = true
let detailVC = DetailVC(context: context)
// present(...)
比如说,在
detailVC
您希望在全局范围内进行更改(以便
App.managedObjectContext
更改并将更改合并到创建的子上下文中)
// Example: App.managedObjectContext.delete(/*some object*/)
try? App.managedObjectContext.save()
这样可以工作,更改将合并到子上下文中。但这会在主队列上执行save。我不应该总是在后台排队换东西吗?我通常的做法是:
// Get the persistent container whose `viewContext` is App.managedObjectContext
App.appDelegate.persistentContainer.performBackgroundTask { (privateContext) in
// Do changes
}
但是,这些更改不会合并到子上下文中。我该怎么做?
let newChild = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
newChild.parent = context.parent
// As I understand it, perform() will run on a background queue in this case, right?
newChild.perform {
// Example modification:
// let object = newChild.object(with: civilization.objectID)
// newChild.delete(object)
try? newChild.save()
newChild.parent?.perform {
try? newChild.parent?.save()
}
}
这似乎有效,但这是否有任何副作用或缺点?它真的在后台队列上运行吗?
NSManagedObjectContext
学到了一些东西,但我还是不清楚:
https://developer.apple.com/documentation/coredata/nsmanagedobjectcontext
)
谢谢!