NSManagedObjectContext insertObject - 字符串存储为空

Posted

技术标签:

【中文标题】NSManagedObjectContext insertObject - 字符串存储为空【英文标题】:NSManagedObjectContext insertObject - string stored as null 【发布时间】:2012-12-06 16:42:31 【问题描述】:

我想通过 insertObject 方法将先前创建的具有一些字符串属性的 NSManagedObject 插入到我的 NSManagedObjectContext 中。这似乎可以正常工作,但是当我再次重新加载保存的对象时,我的所有字符串属性都为空。

我创建了我的实体:

[[NSManagedObject alloc] initWithEntity:description 
         insertIntoManagedObjectContext:nil];

感谢任何建设性的反馈。

【问题讨论】:

没有足够的信息——给我们看一些代码。除非您从未为其设置值,否则字符串不会为 nil 没有内在原因。 【参考方案1】:

不建议插入“以前创建的”托管对象,因为在创建期间插入它会更加健壮。

如果您想复制一个托管对象(即“再次插入”),在持久存储中有效地创建它的 两个实例,您必须创建一个新建一个,然后复制所有属性。

编辑:

为了回应否决和继续讨论,我必须强调,将对象插入上下文然后如果需要删除肯定更合理.这只是实现您想要的更直观和记录的方式。

我强烈建议不要在您的用例中创建无上下文的托管对象!

【讨论】:

这不是真的。可以创建不插入任何托管对象上下文的托管对象。事实上,这正是问题中的代码 sn-p 所做的。通过将nil 作为上下文参数传递,您将获得一个未插入任何上下文的托管对象。您可以稍后将其插入到上下文中,前提是该实体存在于上下文正在使用的模型中。 好的,你是对的。但这引出了一个问题,这是否是一个合适的设计模式。看到有些属性没有正确持久化,可能不是。 我已经将它用于可丢弃的编辑控制器——当用户要求创建一个新条目时,初始化一个未插入的托管对象来存储他们输入的数据。如果他们保存更改,则插入对象,如果他们取消,则丢弃该对象。 很好的例子说明为什么没有必要这样做。很明显如何在没有这种迂回方式的情况下实现这一点。 @Tom Harrington:这正是我想要实现的。在没有上下文的情况下编辑实体,如果用户想要保存修改后的实体,请将其插入我的上下文中。但是在我保存我的上下文之后,所有字符串属性都存储为空。为什么会这样?

以上是关于NSManagedObjectContext insertObject - 字符串存储为空的主要内容,如果未能解决你的问题,请参考以下文章

NSManagedObjectContext:撤消保存操作?

声明 NSManagedObjectContext 时出错

CoreData 多 NSManagedObjectContext 保存通知说明

NSManagedObjectContext 类别

NSManagedObjectContext: performBlockAndWait vs performBlock 通知中心

如何清除 NSManagedObjectContext 中的所有对象?