2009-10-20 66 views
1

我必須缺少一些簡單的東西,但我在將一個tableView綁定到NSDictionaryController時遇到了一些麻煩。這是我目前的方案模型:NSDictionaryController似乎沒有觀察到對內容字典的更改

TableViewColumn --bindsTo - > DictionaryController.arrangedObjects。(值或鍵) --bindsTo - > someClass.someClassMember.aDictionary。

我已經測試了tableView,通過在init中添加一個條目到aDictionary,它顯示正確。但是當另一個方法產生一個對象然後被添加到Dictionary中時,TableView似乎不會更新,甚至不知道aDictionary現在有兩個條目。我試過了我能想到的一切。我試圖(在someClassMember)[self aDictionary setValue:forKey:]和[self setValue:forKeyPath:@「aDictionary」]和類似的變化。關鍵是一個字符串,所以它應該是KVC/KVO兼容的,並且我在一些類成員中'@綜合'了一個詞典。

我錯過了什麼?爲什麼字典中的新條目不會顯示在tableView中?

在此先感謝

+0

我希望有人回答到在第一個答案 – 2013-04-03 12:31:11

回答

1

添加新的項目之前嘗試[self willChangeValueForKey:@"aDictionary"];,並且[self didChangeValueForKey:@"aDictionary"];後來在someClass

+1

這幫助的意見提出的問題,因爲它揭示了一個字典中的一個對象沒有正確實現'copyWithZone'的問題。但即使糾正後,我仍然需要[self will/didChangeValueForKey]。我想我不太瞭解KVC。我的設計怎麼樣保持dictionaryController或tableView觀察字典的內容以編程方式改變?我應該遵守KVC,爲什麼我需要手動通知? – 2009-10-21 16:31:16

+0

有人可以回答上述問題嗎? – 2013-04-03 12:30:42

+0

據我瞭解,你正在觀察可變字典對象。由於它目前正在實施,因此它在發生突變時不會發布關鍵值觀察通知。你沒有做錯什麼,它只是沒有發佈通知。因此,如果您希望每個人都知道字典發生變異的時間,您必須自己發佈通知。如果您不認爲這是正確的行爲,請向Apple提交錯誤報告。 – 2013-10-24 05:53:03