我是第一次使用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语句的帮助下,我知道这是事件的顺序:
  • 在根视图中启动应用程序
  • 进入列表视图
    开始
  • 离开清单检视
    结束/保存
  • 进入商品详细信息视图
  • 进入类别详细信息视图
    开始
  • 触摸“添加类别”按钮,将我们带到另一个视图
    开始
  • 输入新数据
  • 触摸“完成”按钮
    结束/保存
  • touch返回以返回项目详细信息视图
  • 触摸“取消”按钮
    取消
  • 返回列表视图
    开始

  • 至此,我的新类别消失了,我不明白为什么。将其包装成一个组,然后将其保存。难道不应该在那个时候回滚吗?我希望取消只会影响在项目详细信息视图中所做的任何更改。如果现在的行为方式是正确的,那么我如何使其表现出预期的效果?

    任何澄清将不胜感激!

    最佳答案

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

    10-04 13:31
    查看更多