2012-07-08 84 views
0

我正在開發一種繪圖應用程序,其中用戶在畫布上設置點。正在繪製的內容被存儲爲NSManagedObjects。我還啓用了撤消管理器,以便用戶可以通過按一個按鈕撤消最後一次繪圖手勢。核心數據撤消後臺線程刪除

這一切都按預期工作。

然後我有一個按鈕來刪除畫布上的所有內容(清除畫布)。按下後,我會在後臺線程上進行刪除操作,因此可能需要一段時間,我想提供一個進度條。然後我將後臺線程的模型對象上下文與主線程的上下文合併。這工作也很好。

但我希望能夠讓用戶撤消完全刪除操作,只需點擊一下撤銷按鈕。這是我無法做到的。

對於多線程的一部分,我下面這個教程:http://www.cimgf.com/2011/05/04/core-data-and-threads-without-the-headache/

看來我不能得到這個撤銷超出了兩個線程的合併(一次得手,不過,我不知道爲什麼)。不知道我是否應該把整個事情放在撤消組中。我已經嘗試過,但仍然沒有運氣。

+1

我相信你應該能夠撤消組的包裹,並做-undoNestedGroup做到這一點。我沒有測試過,但是我想知道它是否可以運行,如果你測試它。 – svena 2012-07-09 07:20:17

+0

是的,這是我正在嘗試的,但它不起作用,它不會撤消到合併前的狀態。 – Odrakir 2012-07-09 10:04:07

+1

合併本身在撤消組內還是僅僅是後臺操作? – svena 2012-07-09 10:08:51

回答

1

我相信你可以用嵌套的撤銷組來做到這一點。 包裝你的操作和

之間

-(void)beginUndoGrouping; 
-(void)endUndoGrouping; 
合併...並使用 -(void)undoNestedGroup撤消。

+0

這或多或少都有訣竅。我所做的是beginUndoGrouping和endUndoGrouping只有合併操作(mergeChangesFromContextDidSaveNotification)之間窩。現在,沒關係我在其他線程,我可以隨時撤消合併做。 – Odrakir 2012-07-11 10:18:05