已插入但尚未保存的 NSManagedObject?
Posted
技术标签:
【中文标题】已插入但尚未保存的 NSManagedObject?【英文标题】:NSManagedObjects that have been inserted but not yet saved? 【发布时间】:2015-01-18 15:48:42 【问题描述】:可以识别(在运行时)NSManagedObjects
,这些NSManagedObjects
已插入到NSManagedObjectContext
(即inserted == YES
)中,但到目前为止从未将save
d 插入到上下文的存储中。
我最初以为他们的objectID
可能仍然是nil
,但事实并非如此。
更新我进行了一个快速实验,看看检查temporaryID
(请参阅accepted answer)是否也适用于嵌套 MOC。这表明不可以:保存子 MOC 只会向上推一层(即到父 MOC,但不是到更上一层的持久存储),因此新插入的 MOC 的对象 ID 仍然是临时的。在这种情况下,确定 MO 在子 MOC 中是否是新的并且从未保存(甚至没有保存到父 MOC)的一种方法显然是检查[child objectRegisteredForID: object.objectID] && ![parent objectRegisteredForID: object.objectID]
。
【问题讨论】:
【参考方案1】:你可以使用temporaryID
property的NSManagedObjectID
:
如果接收器是临时的,则为是,否则为否。大多数对象 ID 返回 不。插入托管对象上下文的新对象被分配一个 临时 ID,一旦对象被替换为永久 ID 保存到持久存储中。
示例用法:
if(object.objectID.isTemporaryID)
//the object has not been saved yet
【讨论】:
您知道该方案是否也可以扩展到嵌套的托管对象上下文 (MOC)。例如,我假设如果我第一次保存一个子 MOC,它的 MO 仍然会有临时 ID,因为保存只被推上一层(因此到父 MOC,而不是持久存储)?是否还有办法找到从未保存的子 MOC 的 MO(甚至没有保存到父 MOC)?也许通过insertedObjects
?如果您愿意,我可以发布一个单独的问题。
会做实验,然后也许会做。我刚刚在别处读到“对于子 MOC,父 MOC 是持久存储”。所以也许它真的就像对嵌套 MOC 使用相同的策略一样简单。
已完成实验(并更新问题)。以上是关于已插入但尚未保存的 NSManagedObject?的主要内容,如果未能解决你的问题,请参考以下文章
NSManagedObject 中未保存的 NSSet 成员是不是会在保存时保留已删除的成员?
知道 NSManagedObject 实例是新的并且尚未持久化的最简单方法是啥?