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次的东西,而且我仍然不断地丢失东西 - 尽管我过去肯定偶然发现了它们,并且可能也修复了它们...) –