我在iOS中使用父/子托管对象上下文时遇到问题。我记得一个标准用例是使用临时子管理对象上下文,这样用户可以决定按保存并通过save()调用将更改传播到父级,或者通过让孩子放弃用户的更改Moc消失了。
我像这样创造孩子:
childMoc = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType)
childMoc.parentContext = parentMoc
然后我使用
在childMoc中创建一个对象let objectInChildMoc = NSEntityDescription.insertNewObjectForEntityForName(...
在我使用所有必需的变量和几个依赖对象填充闪亮的新对象后,我在Swift中使用此代码尝试从Parent上下文中访问新对象:
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向我建议上面的设置应该可行。
答案 0 :(得分:1)
好吧,这是一个错误!已知错误多年,但仅在StackOverflow中记录。答案就在这里 https://stackoverflow.com/a/11996957/2073793
需要使用获取永久对象ID
obtainPermanentIDs(for:)
之前保存在子上下文中。然后,这些永久的ObjectId可用于从父上下文中检索对象。