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:撤消保存操作?
CoreData 多 NSManagedObjectContext 保存通知说明
NSManagedObjectContext: performBlockAndWait vs performBlock 通知中心