如何从子上下文中检索对象到另一个上下文中?
How to retrieve an object from a child context into another context?
我无法使用 objectID 访问新保存的对象。
我已经从我的 managedContext 创建了一个子托管对象上下文 (cmoc),并在这个 cmoc 中创建了一个新对象。一旦我将变量输入到新对象中,我就在子上下文中调用了 save() ,在父上下文中保存,然后尝试在父上下文中加载对象(以及我在另一个背景上下文中的尝试)使用 objectID。这失败了,我不知道为什么。
我已确保在尝试 return 新上下文中的对象之前进行保存,但这没有帮助。我已确定我正在保存正确的 cmoc 和父上下文。我有点不知所措。
创建 childContext,person 的对象实例(Person 类型)并传递给下一个 vc (destVC):
let childContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
childContext.parent = coreDataStack.managedContext
let person = Person(context: childContext)
destVC.coreDataStack = coreDataStack
destVC.person = person
destVC.childContext = childContext
然后变量添加到person实例
person.cellPhone = ... [etc]
我怀疑我的问题出在保存代码中,该代码当前状态为:
guard childContext.hasChanges else {
return
}
do {
try self.newKeyNumberContext.save()
} catch let error as NSError {
[Manage error]
}
coreDataStack.saveContext()
或者在紧接着的代码中:
let personObjectID = self.person.objectID //(does return an objectID)
let personToReturn = try? coreDataStack.managedContext.existingObject(with: personObjectID)
这不是 return 一个对象,return 是 nil。
啊,结果是来自 Whosebug 的 this link 引导我找到了解决方案。我只有一个临时 ID,在保存之前要求永久 ID 解决了问题。我在 guard childContext.hasChanges 行上方插入了下面的行并将其整理出来。
try? childContext.obtainPermanentIDs(for: [person])
我无法使用 objectID 访问新保存的对象。
我已经从我的 managedContext 创建了一个子托管对象上下文 (cmoc),并在这个 cmoc 中创建了一个新对象。一旦我将变量输入到新对象中,我就在子上下文中调用了 save() ,在父上下文中保存,然后尝试在父上下文中加载对象(以及我在另一个背景上下文中的尝试)使用 objectID。这失败了,我不知道为什么。
我已确保在尝试 return 新上下文中的对象之前进行保存,但这没有帮助。我已确定我正在保存正确的 cmoc 和父上下文。我有点不知所措。
创建 childContext,person 的对象实例(Person 类型)并传递给下一个 vc (destVC):
let childContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
childContext.parent = coreDataStack.managedContext
let person = Person(context: childContext)
destVC.coreDataStack = coreDataStack
destVC.person = person
destVC.childContext = childContext
然后变量添加到person实例
person.cellPhone = ... [etc]
我怀疑我的问题出在保存代码中,该代码当前状态为:
guard childContext.hasChanges else {
return
}
do {
try self.newKeyNumberContext.save()
} catch let error as NSError {
[Manage error]
}
coreDataStack.saveContext()
或者在紧接着的代码中:
let personObjectID = self.person.objectID //(does return an objectID)
let personToReturn = try? coreDataStack.managedContext.existingObject(with: personObjectID)
这不是 return 一个对象,return 是 nil。
啊,结果是来自 Whosebug 的 this link 引导我找到了解决方案。我只有一个临时 ID,在保存之前要求永久 ID 解决了问题。我在 guard childContext.hasChanges 行上方插入了下面的行并将其整理出来。
try? childContext.obtainPermanentIDs(for: [person])