撤消核心数据pipe理对象

我有这个代码:

Store* store = [NSEntityDescription insertNewObjectForEntityForName:@"Store"]; store.name = @"My Company" ... 

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

如前所述,您可以使用撤消pipe理器。 或者,您可以简单地使用一个单独的ManagedObjectContext,并在其中进行所有更改。 如果你决定保留它们,保存上下文。 如果不是,只要丢弃它。 MOC只是一个工作的便笺本,在保存之前不会影响底层数据库。

你不能真正的“分离一个实体”,但是你可以导致一个被pipe理的对象变成一个错误,失去了没有被保存的任何改变。

 [managedObjectContext refreshObject:object mergeChanges:NO]; 

从文档中删除…

如果标志为NO,则对象变成故障并且任何未决的改变都将丢失。 该对象保持故障,直到再次访问,此时其属性值将从存储或上次caching状态重新加载。

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

 [store.managedObjectContext undo]; 

它也支持-redo 。 您可以使用-rollback方法取消最近一次保存的所有更改:

 [store.managedObjectContext rollback] 

如@ melsam的答案所示。

 [store.managedObjectContext rollback]; 

你也可以将用户的所有数据保存在一个数组中,当用户准备就绪时,只需将数组保存到核心数据即可。