我在 iOS 中遇到了父/子托管对象上下文的问题。我记得一个标准用例是使用临时子托管对象上下文,以便用户可以决定按下保存并通过 save() 调用将更改传播到父级,或者可以通过让子级放弃用户的更改莫克消失。
我这样创建孩子:
childMoc = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType)
childMoc.parentContext = parentMoc
然后我使用在 childMoc 中创建一个对象
let objectInChildMoc = NSEntityDescription.insertNewObjectForEntityForName(...
在我用所有必要的变量和几个依赖对象填充我闪亮的新对象后,我在 Swift 中使用此代码尝试从父上下文访问新对象:
childMoc.performBlock({
do {
try childMoc.save()
parentMoc.performBlock({
do {
try parentMoc.save()
do {
let objectInParentMoc = try parentMoc.existingObjectWithID(objectInChildMoc.objectID) as? TheRightType
} catch {
print("Couldn't find object in parent")
}
} catch {
print("Couldn't save parent")
}
})
}
catch {
print ("Couldn't save child")
}
})
我总是得到“在父级中找不到对象”。我错过了什么?我看到使用 NSManagedObjectContext 保存通知的旧示例代码,但我读到使用父子托管对象上下文不再需要这些。上面的代码基于人们声称可以工作的最近的 ObjectiveC 代码(但是它周围抛出了 swift 的 try/catch 东西。)例如,这个链接Correct implementation of parent/child NSManagedObjectContext向我建议上面的设置应该工作。