0

我正在制作一个绘图应用程序。每次点击都会创建一些核心数据实体。用户可以点击撤消按钮,这些点击一次被撤消。这工作正常。

运行某些自动化任务时会出现问题。我有一个按钮,可以在子上下文中创建一堆核心数据实体(自己绘制一些东西),然后保存上下文,以便更改反映在主上下文中。

问题是无论用户点击任务按钮多少次,所有更改都被分组到一个单独的撤消步骤中。

说清楚:他做了5个任务,然后点击一次撤消,他又回到了开头。但我希望他能够一次撤消每一项任务。

我正在使用 UIManagedDocument ,它是核心数据堆栈。所以它有 2 个上下文,一个写入磁盘,一个子用于一般用途,然后我创建后者的一个子用于后台操作。

这是我的代码:

NSManagedObjectContext* childContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
childContext.parentContext = self.document.managedObjectContext;
childContext.undoManager = self.document.undoManager;
[childContext performBlock:^{

    //a lot of things happen here, that generate many entities

    [childContext save:nil];

    [self.document.managedObjectContext performBlock:^{

        //completion stuff, update UI...

    }];
}];
4

1 回答 1

0

一个想法是将您希望可撤消的每个代码块包含在其自己的块中(具有相同的子上下文)。也许开始把它分成两块,看看它是否有效。

再想一想,我认为每次保存都不是真正的保存,而只是将更改推送到父上下文。所以我的猜测是父上下文将每个孩子注册为一个可撤消的事件。也许您可以尝试更频繁地保存,然后看看这些块是否可以撤消。

于 2013-03-15T21:42:24.793 回答