我无法使用objectID访问新保存的对象。
我从我的managedContext中创建了一个子托管对象上下文(cmoc),并在此cmoc中创建了一个新对象。将变量输入新对象后,我在子上下文中调用了save(),在父上下文中进行了保存,然后尝试在父上下文中加载该对象(并尝试在另一个背景上下文中)使用objectID。这失败了,我不知道为什么。
我已确保在尝试在新上下文中返回对象之前进行保存,但这样做没有帮助。我确保保存了正确的cmoc和父上下文。我有点茫然。
要创建childContext,人员(人员类型)的对象实例并传递到下一个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.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)
不返回对象,而是返回nil。
答案 0 :(得分:0)
嗯,原来来自stackOverflow的this link导致我找到了解决方案。我只有一个临时ID,在保存之前要求输入一个永久ID解决了该问题。我将以下行插入到警卫childContext.hasChanges行上方,并对其进行了排序。
try? childContext.obtainPermanentIDs(for: [person])