我正在尝试创建一个应用程序,用户可以在其中编辑视图中managedObject
的属性,并选择Done
来保留更改,或Cancel
撤消更改
要实现此行为,我计划执行以下操作 -
managedObject
时,请创建backupManagedObject
,它是原始managedObject
的克隆。 backupManagedObject
是在单独的子ManagedObjectContext 中创建的。managedObject
。Done
被按下,原始managedObject
被保留,备份被删除Cancel
被按下,backupManagedObject
被克隆到原始managedObject
中,备份被删除我的问题是,一旦我完成了backupManagedObject
,我怎么能删除不再有托管对象的childManagedObjectContext
,我不打算再使用它们了(对于每一个新的查看控制器,我打算只创建一个新的子托管对象上下文,并在完成视图控制器后将其销毁。)
答案 0 :(得分:7)
你应该这样做:
当您加载编辑的视图控制器时,创建新的托管对象上下文,这是您的主视图的子项,我们称之为 editingMOC 。
对 editingMOC 进行编辑,如果要保留它们,请保存 editingMOC (这会将更改传播到 mainMOC ),然后保存 mainMOC 以将数据保存到持久存储。
如果您希望放弃对 editingMOC 所做的更改,只需不保存它们并让上下文被取消删除。
答案 1 :(得分:3)
通常,托管对象上下文的释放方式与释放和释放Objective-C中的任何其他对象的方式相同。
如果您使用ARC,只需将属性设置为nil
,当您不再需要它时,它将随着任何未保存的更改而被销毁。
但是,您解决此问题的方法有点复杂
您可以简单地创建一个新的“编辑”子上下文,在该上下文中获取您想要编辑的对象并对对象进行更改。
如果用户决定提交更改,请保存上下文(直到商店),如果没有,则只需销毁上下文。
答案 2 :(得分:0)
更简单的方法是使用NSManagedObject属性中的数据简单地创建视图并填充UI控件(文本字段等)。如果用户进行任何编辑,则设置一个标志,以便您知道是否进行了更改,然后在选择完成时使用UI控件中的值更新NSManagedObject属性并保存MOC。如果他们选择取消,则不要做任何事情。
有关使用类似方法在iOS上编辑核心数据记录的应用的视频,请参阅此链接。 OSX应用程序使用标准NSPersistentDocument撤消管理器。