首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除NSManagedObjectContext

删除NSManagedObjectContext
EN

Stack Overflow用户
提问于 2014-01-02 09:49:26
回答 3查看 1.1K关注 0票数 1

我正在尝试创建一个应用程序,用户可以在该应用程序中编辑视图中的managedObject属性,并选择Done来保存更改,或者选择Cancel来撤消更改。

为了实现这个行为,我计划做以下工作-

  • 当加载视图控制器来编辑managedObject时,创建一个backupManagedObject,它是原始managedObject的一个克隆。
  • 这个backupManagedObject是在一个单独的子ManagedObjectContext中创建的。
  • 让用户编辑原始managedObject
  • If:
    • 按下Done,保留原始managedObject,并删除备份。
    • 按下Cancel,将backupManagedObject克隆到原始managedObject中,并删除备份。

我的问题是,一旦我完成了backupManagedObject,如何删除不再有托管对象且不再使用它们的childManagedObjectContext (对于每个新的视图控制器,我计划只创建一个新的子托管对象上下文,并在视图控制器完成后销毁它)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-02 10:35:42

通常,托管对象上下文的发布方式与object中的任何其他对象释放和释放的方式相同。

如果您正在使用ARC,只需在不再需要时将该属性设置为nil,它将与任何未保存的更改一起被销毁。

但是,您处理这个问题的方法有点复杂。

您可以简单地创建一个新的“编辑”子上下文,获取要在该上下文中编辑的对象并对对象进行更改。

如果用户决定提交更改,则保存上下文(直到存储),如果没有,只需销毁上下文即可。

票数 4
EN

Stack Overflow用户

发布于 2014-01-02 10:44:15

相反,你应该这样做:

加载编辑视图控制器时,创建新的托管对象上下文,它是主控件的子对象,我们将其称为editingMOC。

对editingMOC进行编辑,如果希望持久化,请保存editingMOC (这将传播对mainMOC的更改),然后保存mainMOC以将数据保存到持久存储中。

如果您希望放弃对editingMOC所做的更改,就不要保存它们,让上下文去分配。

票数 7
EN

Stack Overflow用户

发布于 2014-01-02 11:44:26

一个更简单的方法是简单地创建视图并填充UI控件(文本字段等)。使用来自NSManagedObject属性的数据。如果用户做了任何编辑,然后设置一个标志,以便您知道是否进行了更改,然后当他们选择Done时,使用UI控件中的值更新NSManagedObject属性,并保存MOC。如果他们选择取消,那么什么都不要做。

有关使用类似方法在iOS上编辑核心数据记录的应用程序的视频,请参见此链接。OSX应用程序使用标准的NSPersistentDocument撤消管理器。

http://ossh.com.au/design-and-technology/software-development/uimanageddocument-icloud-integration/os-x-and-ios-app-integration-with-core-data-and-icloud/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20880167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档