0
我正在制作一个绘图应用程序。每次点击都会创建一些核心数据实体。用户可以按下撤消按钮,并且这些点击一次就被撤消。这工作正常。在performBlock中的核心数据保存子上下文:删除撤消堆栈
问题出现在某些自动化任务运行时。我有一个按钮,它在子环境中创建一堆核心数据实体(自己绘制一些东西),然后保存上下文,以便在主环境中反映更改。
问题在于用户点击任务按钮的次数并不重要,所有更改都分组为一个撤消步骤。
要说清楚:他完成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...
}];
}];
你描述的正是我想要的:每个子上下文保存为一个可撤销事件。但它不是那样工作的。随着每个孩子的保存,它将所有以前的操作分组到一个可撤消的事件中,使文档恢复到打开时的状态。 – Odrakir 2013-03-16 09:10:37
那么?您是否尝试过创建独立上下文的第一个策略? – Mundi 2013-03-16 13:06:48
如果我理解你是对的,那就是我正在做的。我想要撤消的每个代码块都在它自己的performBlock函数中。它不起作用。 – Odrakir 2013-03-18 16:53:39