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