我有以下简单的用例:
NSTableView
,用户可以在其中添加新条目。在核心数据中创建一个Entry
对象,并预先填充计算值。Entry
对象的字段。要实现“取消/放弃”更改,我在“详细视图”中使用了子级NSManagedObjectContext
(在显示之前,该子级接收Entry对象)。代码是:
// Create child MOC
self.managedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
self.managedObjectContext.parent = self.parentManagedObjectContext
guard let entryInChildContext = try? self.managedObjectContext.existingObject(with: self.entry.objectID) as? Entry else {
// Display error message
}
// Switch to the new context
self.entry = entryInChildContext
问题
如果新创建的objectID
尚未保存到持久性存储中,则Entry
可以是临时的。在这种情况下,无法在子MOC中找到该条目。
我尝试了什么但没用
managedObjectContext.obtainPermanentIDs(for: [newEntry])
,但会引起与前面的项目符号中所述相同的问题。在子MOC上调用它也不起作用。那么,在这种情况下,我如何使用子托管对象上下文?我真的希望有一个永久的对象ID,因为Entry实体没有自己的唯一字段。
在此先感谢您的帮助!