我正在制作一个绘图应用程序。每次点击都会创建一些核心数据实体。用户可以点击撤消按钮,这些点击一次被撤消。这工作正常。
运行某些自动化任务时会出现问题。我有一个按钮,可以在子上下文中创建一堆核心数据实体(自己绘制一些东西),然后保存上下文,以便更改反映在主上下文中。
问题是无论用户点击任务按钮多少次,所有更改都被分组到一个单独的撤消步骤中。
说清楚:他做了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...
}];
}];