核心数据和撤消组

时间:2011-07-09 20:58:55

标签: ios core-data nsundomanager

我第一次使用Core Data,这让我很难过。

我有以下方法来处理对我的更改进行分组并保存它们:

- (void)beginUndoGrouping:(NSManagedObjectContext *)managedObjectContext {
    NSLog(@"begin");
    [managedObjectContext processPendingChanges];
    [managedObjectContext.undoManager beginUndoGrouping];
}

- (void)endUndoGroupingAndSaveContext:(NSManagedObjectContext *)managedObjectContext
{
    NSLog(@"end/save");
    [managedObjectContext processPendingChanges];
    [managedObjectContext.undoManager endUndoGrouping];
    [self saveContext:managedObjectContext];
}

- (void)cancelUndoGrouping:(NSManagedObjectContext *)managedObjectContext {
    NSLog(@"cancel");
    [managedObjectContext processPendingChanges];
    [managedObjectContext.undoManager endUndoGrouping];
    [managedObjectContext.undoManager undoNestedGroup];
}

在NSLog语句的帮助下,我知道这是事件序列:

  • 以root视图启动应用
  • 输入列表视图
    开始
  • 离开列表视图
    端/保存
  • 输入项目明细视图
  • 输入类别详细信息视图
    开始
  • 触摸添加类别按钮,将我们带到另一个视图
    开始
  • 输入新数据
  • 触摸完成按钮
    端/保存
  • 触摸返回返回项目详细信息视图
  • 触摸取消按钮
    取消
  • 返回列表视图
    开始

此时我的新类别已经消失,我不明白为什么。它被包裹在一个组中,该组已经结束并保存。难道不应该免于在那时退回吗?我原以为取消只会影响项目详细信息视图中所做的任何更改。如果它现在的行为方式是正确的,那么我该如何让它按照我期望的方式行事呢?

任何澄清都将不胜感激!

1 个答案:

答案 0 :(得分:2)

答案结果是你需要为内部组使用第二个托管对象上下文。