将 NSManagedObject 重新插入到 ManagedObjectContext

Posted

技术标签:

【中文标题】将 NSManagedObject 重新插入到 ManagedObjectContext【英文标题】:Re-inserting NSManagedObject to ManagedObjectContext 【发布时间】:2016-11-09 05:53:30 【问题描述】:

我有一个 NSManageObect 实例,我在没有有效上下文的情况下创建它只是为了使用它来保存数据并传递它

convenience init() 
    let entityDescription =  NSEntityDescription.entityForName("UserEntity", inManagedObjectContext:managedContext)
    self.init(entity: entityDescription!, insertIntoManagedObjectContext: nil)

但有时让 Core Data 跟踪(保存)它们对我来说很方便。在这些情况下,我执行以下操作将其添加到核心数据托管对象上下文中

myManagedContext.insertObject(myUserEntityObject)

这一切都很好。

我的问题是,如果我多次重新插入对 myManagedContext 的相同引用,这实际上是否重要?这种重新插入有什么不好的地方吗?在我看来,它不应该有所作为,因为它插入了相同的对象引用。

【问题讨论】:

【参考方案1】:

只要满足两个条件就是安全的:

    这是同一个托管对象上下文 托管对象的 ID 仍然是临时 ID(即托管对象尚未保存)。

让插入调用看起来像这样会更安全

if myUserEntityObject.objectID.isTemporaryID 
    myManagedContext.insertObject(myUserEntityObject)

【讨论】:

以上是关于将 NSManagedObject 重新插入到 ManagedObjectContext的主要内容,如果未能解决你的问题,请参考以下文章

插入的 NSManagedObject 无法保存时会发生啥情况?

在插入之前分配 NSManagedObject 属性不会坚持

将 NSManagedObject 更新为核心数据

当模型编辑器中的模型更改时重新创建 NSManagedObject 子类

NSManagedObject 不插入它:相关的很多

NSManagedObject 如何重新加载