从 child 保存 object NSManagedObjectContext 在 parent 中不可用
Save object from child NSManagedObjectContext not available in parent
我在 iOS 中遇到 parent/child 托管 object 上下文的问题。我记得一个标准用例是使用临时 child 托管 object 上下文,以便用户可以决定按保存并通过 save() 调用将更改传播到 parent ,或者可以通过让 child Moc 消失来放弃用户的更改。
我这样创建 child:
childMoc = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType)
childMoc.parentContext = parentMoc
然后我使用
在 childMoc 中创建一个 object
let objectInChildMoc = NSEntityDescription.insertNewObjectForEntityForName(...
在我用所有必要的变量和几个依赖的 object 填充我闪亮的新 object 之后,我在 Swift 中使用这段代码来尝试访问新的object 来自 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")
}
})
我总是 "Couldn't find object in parent"。我错过了什么?我看到使用 NSManagedObjectContext 保存通知的旧示例代码,但我读到那些对于 parent-child 托管 Object 上下文不再是必需的。上面的代码是基于人们声称有效的最近的 ObjectiveC 代码(但是周围有 swift 的 try/catch 东西。)例如,这个 link Correct implementation of parent/child NSManagedObjectContext 向我建议上述设置应该有效。
好的,这是一个错误!多年来已知的错误,但仅记录在 Whosebug 中。答案在这里
需要使用以下方法获取永久对象 ID
obtainPermanentIDs(for:)
before 在子上下文中保存。然后,这些永久性 ObjectId 可用于从父上下文中检索对象。
我在 iOS 中遇到 parent/child 托管 object 上下文的问题。我记得一个标准用例是使用临时 child 托管 object 上下文,以便用户可以决定按保存并通过 save() 调用将更改传播到 parent ,或者可以通过让 child Moc 消失来放弃用户的更改。
我这样创建 child:
childMoc = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType)
childMoc.parentContext = parentMoc
然后我使用
在 childMoc 中创建一个 objectlet objectInChildMoc = NSEntityDescription.insertNewObjectForEntityForName(...
在我用所有必要的变量和几个依赖的 object 填充我闪亮的新 object 之后,我在 Swift 中使用这段代码来尝试访问新的object 来自 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")
}
})
我总是 "Couldn't find object in parent"。我错过了什么?我看到使用 NSManagedObjectContext 保存通知的旧示例代码,但我读到那些对于 parent-child 托管 Object 上下文不再是必需的。上面的代码是基于人们声称有效的最近的 ObjectiveC 代码(但是周围有 swift 的 try/catch 东西。)例如,这个 link Correct implementation of parent/child NSManagedObjectContext 向我建议上述设置应该有效。
好的,这是一个错误!多年来已知的错误,但仅记录在 Whosebug 中。答案在这里
需要使用以下方法获取永久对象 ID
obtainPermanentIDs(for:)
before 在子上下文中保存。然后,这些永久性 ObjectId 可用于从父上下文中检索对象。