1

我已經成立了一個NSTableView,其列綁定到一個NSArrayController從一個NSMutableArrayMatches)獲取其內容NSMutableDictionary實例。NSTableView的內容不被刷新正確

雖然事情工作,我遇到了這個問題:

Matches陣列進行更新(這可能真的很經常發生),表視圖可能無法更新,但是當視圖重新繪製(例如,當我最小化並重新加載我的應用程序時)內容顯示得很好。

有關於此的任何想法?我怎麼能使它重繪視圖/更新內容?


提示:

  • 我也用[tableView reloadData]更新我Matches後陣,但沒有效果。
  • 這不會發生在所有的時間,但有些時候......(這是需要一定的耐心,點擊這裏或最小化的應用程序,內容出現之前)。

回答

4

這聽起來像是你直接操縱數組。如果是這樣,你可以這樣做,「控制器背後」,可以這麼說。它沒有得到任何類型的數組已經改變的通知。

理想情況下,數組控制器應該是負責添加和從模型中刪除東西的對象;您應該在控制器上使用addObject:removeObject:(或類似的),而不是陣列本身。

如果失敗,則可以在操作陣列時發出KVO通知(willChangeValueForKey:didChangeValueForKey:)這將使控制器拿起更改。

+2

手動發佈KVO通知應該是最後的手段。更好的做法是使用[符合KVO標準的索引訪問器方法](https://developer.apple.com/library/mac/documentation/cocoa/conceptual/KeyValueCoding/Articles/AccessorConventions.html#//apple_ref/doc/uid/20002174 -SW4)來改變數組。我甚至更喜歡發送消息給控制器。如果您手動發出KVO通知,最好使用數組特定的'-willChange:valuesAtIndexes:forKey:'和'-didChange:valuesAtIndexes:forKey:'。他們允許觀察員做出更有效的迴應。 –

+0

非常感謝!它**可以工作......(Baaah!我已經使用了表格和綁定以及1000次的東西,而且我仍然不斷地丟失東西 - 儘管我過去肯定偶然發現了它們,並且可能也修復了它們...) –