我正在尝试创建一个应用程序,用户可以在该应用程序中编辑视图中的managedObject属性,并选择Done来保存更改,或者选择Cancel来撤消更改。
为了实现这个行为,我计划做以下工作-
managedObject时,创建一个backupManagedObject,它是原始managedObject的一个克隆。backupManagedObject是在一个单独的子ManagedObjectContext中创建的。managedObject。Done,保留原始managedObject,并删除备份。Cancel,将backupManagedObject克隆到原始managedObject中,并删除备份。
我的问题是,一旦我完成了backupManagedObject,如何删除不再有托管对象且不再使用它们的childManagedObjectContext (对于每个新的视图控制器,我计划只创建一个新的子托管对象上下文,并在视图控制器完成后销毁它)。
发布于 2014-01-02 10:35:42
通常,托管对象上下文的发布方式与object中的任何其他对象释放和释放的方式相同。
如果您正在使用ARC,只需在不再需要时将该属性设置为nil,它将与任何未保存的更改一起被销毁。
但是,您处理这个问题的方法有点复杂。
您可以简单地创建一个新的“编辑”子上下文,获取要在该上下文中编辑的对象并对对象进行更改。
如果用户决定提交更改,则保存上下文(直到存储),如果没有,只需销毁上下文即可。
发布于 2014-01-02 10:44:15
相反,你应该这样做:
加载编辑视图控制器时,创建新的托管对象上下文,它是主控件的子对象,我们将其称为editingMOC。
对editingMOC进行编辑,如果希望持久化,请保存editingMOC (这将传播对mainMOC的更改),然后保存mainMOC以将数据保存到持久存储中。
如果您希望放弃对editingMOC所做的更改,就不要保存它们,让上下文去分配。
发布于 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/
https://stackoverflow.com/questions/20880167
复制相似问题