我正在閱讀關於Objective-c的一本書並瞭解撤消管理器。這個概念看起來很簡單,但提供的例子似乎過於複雜。基本上,我有一個表視圖連接到一個NSArrayController,我添加或刪除人員到一個數組,我可以編輯他們的名字和東西。因爲該示例使用NSArrayController和綁定,所以添加和刪除是自動的,並且所有的編輯都是自動的。Objective-C撤消管理器問題
要使用撤消管理器,從我的理解,我需要實現我自己的方法來添加/刪除/編輯。
我實現做了添加和刪除,並得到應有的關鍵值編碼自動調用這些方法:
- (void)removeObjectFromEmployeesAtIndex:(int)index;
- (void)insertObject:(Person *)p inEmployeesAtIndex:(int)index;
然後進行編輯,我必須註冊類作爲觀察員,觀察變化編輯:
- (void)changeKeyPath:(NSString *)keyPath
ofObject:(id)obj
toValue:(id)newValue
這裏是我的問題:
爲什麼我公頃有做這麼多?我的理解是,使用NSArrayController和綁定應該使添加/刪除/編輯項目變得更容易和更自動化。但是,如果我必須手動實現所有這些方法,只需添加撤銷支持,爲什麼要使用NSArrayController或綁定呢?
背後發生了什麼?在Interface Builder中,添加按鈕連接到NSArrayController上的add方法。那麼我的insertObject方法如何被調用?我知道這是通過關鍵的值編碼,但是什麼使得NSArrayController的add方法被重寫僅僅是b/c我的文檔實現了這個方法?
該解決方案是不對稱的。我使用一個概念來處理撤消添加/刪除以及另一個概念來處理撤消編輯。我不能只觀察對數組的更改嗎?我想這會使觀察值關鍵字方法複雜化,但是這會更有意義嗎?
你使用的是核心數據? – 2011-06-12 18:35:42
不,我還沒有了解到這一點,但 – JPC 2011-06-12 22:59:15
你通過在Core Data之前學習這一點而節省了很多痛苦;那麼它會變得更有意義。我可以提供的一點建議是,你可以在Cocoa/Xcode中找到非常方便使用的東西,但是你經常需要解決。一個具體的例子是使用IB來創建GUI--做,複雜的事情會變得無用(對於動畫等),並且你必須得到幕後(IB在CoreData爲你的問題做了改進)。似乎你現在已經看到了其中一種情況。我的觀點是:如果你覺得自己在做一些艱難的事情,它可能仍然是最好的/正確的方式。Goodluck – Nektarios 2011-06-15 16:02:17