我正在研究一些使用NSOperation
導入數據的代碼。我希望用戶能夠撤消在導入操作期間創建的NSManagedObject
實例。取消在主線程中執行的核心數據插入
從我所知道的情況來看,對主線程執行的任何操作都不可能使用NSManagedObjectContext
-undoManager
。從使用核心數據編程指南節主題禁閉支持併發,我們有這兩個條件:
- 只的objectID應通過託管對象上下文之間 (上 單獨的線程)
- 被管對象 必須保存在 之前的上下文中才能使用objectID。
這是有道理的,因爲管理對象需要從專用存儲(NSManagedObjectContext
)公共存儲(NSPersistentStore
),他們可以共享之前移動。
不幸的是,-save:
消息還會導致撤消堆棧中的任何託管對象被刪除。從同樣的引導件的存儲器管理使用核心數據部分:
託管具有掛起 變化(插入,缺失,或 更新)可以通過上下文 被保留,直到它們的上下文中的對象被髮送保存:, 重置,回滾或dealloc消息, 或相應數量的撤銷到 撤消更改。
我已經試過幾件事情要解決這一限制,一切最終導致恢復大部分工作都發生在主線程的(和紡紗沙灘球),以獲得任何線索撤消通過創建關閉對象工作主線程將非常感激。
-
的增強雷達已經提交:rdar://problem/8977725
爲什麼不只是保留此操作插入的所有託管對象ID的日誌?這樣,如果用戶想要回滾,可以簡單地遍歷並刪除對象。如果您還必須回滾突變,那麼記錄關鍵/值更改也不難。看起來比試圖將其放到撤銷管理器中更簡單。 – ImHuntingWabbits 2011-02-26 08:53:39
關於上述評論,你會如何提出重做? – wbyoung 2011-06-20 16:06:46