撤消核心数据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];
你也可以将用户的所有数据保存在一个数组中,当用户准备就绪时,只需将数组保存到核心数据即可。