撤消核心数据管理对象

Luc*_*uke 4 iphone core-data objective-c ios

我有这个代码:

Store* store = [NSEntityDescription insertNewObjectForEntityForName:@"Store"];
store.name = @"My Company"
...
Run Code Online (Sandbox Code Playgroud)

现在,商店在上下文中进行管理,并在保存上下文时保存,但我有一个按钮,用户可以在其中取消收集数据的表单.如何从上下文中撤消或删除它?还是我错了?

Cal*_*leb 11

Core Data 内置了对undo的支持,因此您可以通过将-undo消息发送到上下文来撤消单个更改:

[store.managedObjectContext undo];
Run Code Online (Sandbox Code Playgroud)

它也支持-redo.您可以使用以下-rollback方法撤消最近保存的所有更改:

[store.managedObjectContext rollback]
Run Code Online (Sandbox Code Playgroud)

如@melsam的回答所示.

  • @Dude 前者反转单个更改,后者反转*所有* 更改直到上一次保存。您是否查看了我链接的文档?它会有所帮助。另请阅读 [NSManagedObjectContext 参考页](https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/CoreDataFramework/Classes/NSManagedObjectContext_Class/NSManagedObjectContext.html) 中的撤消方法。我刚刚意识到您的问题被标记为 [tag:iOS],因此请注意文档中的注释,该注释说您需要设置上下文的撤消管理器以启用撤消支持。 (2认同)

Jod*_*ins 8

如前所述,您可以使用撤消管理器.或者,您可以简单地使用单独的ManagedObjectContext,并在那里进行所有更改.如果您决定保留它们,请保存上下文.如果没有,只需丢弃它.MOC只是工作的便笺簿,在保存之前对底层数据库没有影响.

您无法真正"分离实体",但您可以使托管对象重新变为故障,丢失任何尚未保存的更改.

[managedObjectContext refreshObject:object mergeChanges:NO];
Run Code Online (Sandbox Code Playgroud)

从文档中删除......

如果flag为NO,则对象将变为fault,并且任何挂起的更改都将丢失.在再次访问对象之前,该对象仍然是一个错误,此时它的属性值将从存储或最后一个缓存状态重新加载.


mel*_*sam 6

[store.managedObjectContext rollback];
Run Code Online (Sandbox Code Playgroud)