我在iOS中遇到了父/子托管对象上下文的问题。我记得一个标准的用例是使用临时的子托管对象上下文,以便用户可以决定按save并通过save()调用将更改传播给父项,或者可以通过让子项放弃用户的更改Moc消失。从子项保存对象NSManagedObjectContext在父项中不可用
我创作的孩子是这样的:
childMoc = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType)
childMoc.parentContext = parentMoc
然后我创建一个使用
let objectInChildMoc = NSEntityDescription.insertNewObjectForEntityForName(...
我完成填充其所有必要的变量和我的闪亮的新对象后在childMoc对象几个依赖对象,我在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代码,人们声称它的工作原理(但是使用try/catch的东西迅速抛出它)。例如,这个链接Correct implementation of parent/child NSManagedObjectContext暗示了上面的设置应该工作。
只是澄清 - 对象是保存在父MOC。如果我稍后进行抓取,我会找到它。因此,existingObjectWithID似乎是在父级管理对象上下文中查找对象的错误方法。 –
我试着跳过整个'existingObjectWithID'调用,代码似乎一直工作,直到我们试图删除一个对象,然后它抱怨必须从错误的上下文中删除一个对象。 –