2012-09-16 51 views
0

我經常有一個帶編輯按鈕的UITableViewController,當表中沒有行時,我喜歡禁用該按鈕。爲了保持同步,我每次發生可能更新其dataSource的事件時啓用/禁用按鈕 - 添加第一行,刪除最後一行,在viewDidLoad等。每當我添加一些新功能,可以影響的內容表,我必須記住要合併這個邏輯。當UITableView發生變化時發出通知

是否有我可以用來簡化這個的UITableView的一些代表?一種方法可以知道每當表格(或其dataSource)被修改時,我可以檢查dataSource中的項目數量並相應地啓用/禁用。

另外,任何其他方法將受到歡迎。

回答

3

的數據源。所以,只要數據源發生變化,你就知道,如果你想知道的話。換句話說,你遇到這個問題的原因是你將模型(在模型 - 視圖 - 控制器體系結構中)視爲外星人。相反,將模型視爲你自己的東西。負責你的模型。例如,模型是一個數組?然後將其包裝在您自己的類中,必須爲其提供所有更改數組的命令。這樣,只要告知更改數組,它就會發出通知。

也有可能在某些情況下使用鍵值觀察來得到通知,當某些事情發生變化時,您可以查看它,但對於像數組和字典這樣的基元,這可能會比它的價值更麻煩。同樣,您可能更樂意將自己的模型存儲包裝到自己的類中,通過KVO您可以管理自己。

+0

是的,這就是我所期待的 - 我可以子類化NSArray並設置一個協議,以便在添加或刪除項目時通知委託人。不幸的是,我的數據源比這更復雜一點(它是一個字典數組,每個數組都包含另一個數組),所以它不太直接 - 但肯定可行。我希望可能會有一些內置或simlper,我忽略。 –

+0

我還應該提到我的數據源有些不典型 - 它實際上是一種查詢核心數據並將對象按摩到前面提到的字典數組中的方法(通過一些緩存來提高性能)。因此,無論何時創建託管對象,數據源都會自動更新 - 不會直接添加或刪除託管對象。所以我不得不在awakeFromInsert中做一些事情。我會考慮的。 –

+0

不要繼承NSArray。把它包起來。 - 但是,由於您實際上在做更復雜的事情,因此可能會有更好的方法。可能您應該再次提出問題(另一個問題),並更好地描述數據源。 – matt

相關問題