NSManagedObject 如何重新加载

Posted

技术标签:

【中文标题】NSManagedObject 如何重新加载【英文标题】:NSManagedObject How To Reload 【发布时间】:2010-06-02 21:29:47 【问题描述】:

我有一个由现有对象表和一个添加按钮组成的视图,它允许 用户创建一个新对象。当用户按下 Add 时,该对象在列表视图控制器中创建,因此该对象将成为该托管对象上下文的一部分 (通过NSEntityDescription insertNewObjectForEntityForName: 方法)。

添加视图具有托管对象的属性。在列表视图控制器中, 我创建了一个添加视图控制器,将属性设置为我创建的托管对象,然后 然后将添加视图推送到导航堆栈。

在添加视图中,我有两个按钮用于保存和取消。在保存中,我保存托管对象 并通过委托方法将托管对象传递回列表视图控制器。如果 用户取消,然后我删除对象并将 nil 传递回列表视图控制器。

我在添加视图中遇到的复杂情况与UIImagePickerController 有关。 在添加视图中,我有一个按钮,允许用户为对象拍照 (或使用照片库中的现有照片)。但是,转移到 UIImagePickerController 并让用户使用相机,导致didReceiveMemoryWarning 在添加视图控制器中。

此外,视图被卸载,这也导致我的NSManagedObject 被破坏。我的问题 是,你如何去重新加载NSManagedObject 在它被释放的情况下,因为 内存不足的情况?

【问题讨论】:

【参考方案1】:

只是一个建议,但是等到用户说他们完成编辑后再创建托管对象怎么样?

将“编辑器”的所有属性存储在您单独保存的字典中(以防在编辑过程中来电,或者他们想从另一个应用程序复制文本以粘贴到您的新项目中),保存每个他们编辑字段的时间。然后,当用户完成编辑后,一次性从字典内容中创建并保存托管对象。如果他们取消,重置(或删除)字典(并清理其持久文件)。这样您就可以在内存不足的情况下更好地控制。

【讨论】:

以上是关于NSManagedObject 如何重新加载的主要内容,如果未能解决你的问题,请参考以下文章

如何重新获取NSManagedContext中存在的对象

如何强制重新获取 NSManagedObject 的关系集

从 Core Data 加载 NSManagedObject 时,我可以免费获得它的孩子吗?

将 NSManagedObject 重新插入到 ManagedObjectContext

如何将 NSManagedObject 的 NSKeyedUnarchive 子类导入核心数据?

NSManagedObject;保留或加载到自定义 NSObject 中?