删除NSManagedObjectContext

时间:2014-01-02 09:49:26

标签: ios objective-c core-data nsmanagedobject nsmanagedobjectcontext

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

要实现此行为,我计划执行以下操作 -

  • 加载视图控制器以编辑managedObject时,请创建backupManagedObject,它是原始managedObject的克隆。
  • backupManagedObject是在单独的子ManagedObjectContext 中创建的。
  • 让用户编辑原始managedObject
  • 如果:
    • Done被按下,原始managedObject被保留,备份被删除
    • Cancel被按下,backupManagedObject被克隆到原始managedObject中,备份被删除

我的问题是,一旦我完成了backupManagedObject,我怎么能删除不再有托管对象的childManagedObjectContext,我不打算再使用它们了(对于每一个新的查看控制器,我打算只创建一个新的子托管对象上下文,并在完成视图控制器后将其销毁。)

3 个答案:

答案 0 :(得分:7)

你应该这样做:

当您加载编辑的视图控制器时,创建新的托管对象上下文,这是您的主视图的子项,我们称之为 editingMOC

editingMOC 进行编辑,如果要保留它们,请保存 editingMOC (这会将更改传播到 mainMOC ),然后保存 mainMOC 以将数据保存到持久存储。

如果您希望放弃对 editingMOC 所做的更改,只需不保存它们并让上下文被取消删除。

答案 1 :(得分:3)

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

如果您使用ARC,只需将属性设置为nil,当您不再需要它时,它将随着任何未保存的更改而被销毁。

但是,您解决此问题的方法有点复杂 您可以简单地创建一个新的“编辑”子上下文,在该上下文中获取您想要编辑的对象并对对象进行更改。

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

答案 2 :(得分:0)

更简单的方法是使用NSManagedObject属性中的数据简单地创建视图并填充UI控件(文本字段等)。如果用户进行任何编辑,则设置一个标志,以便您知道是否进行了更改,然后在选择完成时使用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/