2011-01-14 47 views
0

我創建了一個託管對象與我的iPhone應用程序中的幾個NSNumber成員。我初始化這些值。我也創建了一個子對象成員。然後,我創建一個撤消管理器,以便我可以對子對象執行撤消操作,而不會影響初始化的參數。然而,當我開始我的應用程序和電話...爲什麼NSUndoManager canUndo YES?

[undoManager canUndo]; 

...這是「是」。怎麼會這樣?頂級數據成員重置爲零。不僅如此,sub-objet的managedObjectContext也是零。如何在創建子對象之前創建撤銷管理器。撤消管理器是否恢復活動?它似乎允許撤銷整個託管對象,即使這些數據成員在創建撤消管理器之前已設置。

任何洞察力是讚賞。

+0

NSManagedObjectContext創建它自己的撤銷管理器。使用disableUndoRegistration和enableUndoRegistration來防止某些事情被撤消。 – ughoavgfhw 2011-01-14 07:48:33

回答

1

看來,如果一個託管對象沒有保存,那麼創建一個NSUndoManager將應用於該對象,因爲它存在,並且將允許撤消對該對象的任何更改。我通過在視圖出現之前簡單地保存對象來發現這一點,因爲對象是通過各種屏幕上的選項創建的。如果我在保存對象後嘗試撤消,canUndo會按預期返回NO。

另一種選擇是在視圖出現後以某種方式調用撤消管理器上的removeAllActions,但這會有問題,因爲入口點太多。現在該對象已保存,如果用戶取消,我將刪除它。

我希望這可以幫助未來的人。

0

撤銷管理器中的更改註冊被推遲。您必須確保處理更改,直到您設置撤消管理器。您可以使用processPendingChanges方法。這裏舉個小例子:

// create initial objects 
[managedObjectContext processPendingChanges]; 

// enable undo 
managedObjectContext.undoManager = undoManager; 
相關問題