刷新Cocoa-Binding - NSArrayController - ComboBox

Tal*_*ode 3 cocoa nsarraycontroller cocoa-bindings

在我的应用中,我做了一个非常简单的绑定.我有一个绑定到NSArrayController的NSMutableArray.控制器本身绑定到ComboBox,它显示NSMutableArray的所有内容.工作良好.

问题是:数组的内容会发生变化.如果用户对应用程序进行了一些调整,我会删除NSMuteableArray中的所有项目,并用新的和不同的项目填充它.

但是NSMutableArray < - > NSArrayController < - > NSComboBox的绑定不会刷新.

无论我是否从Array中删除所有对象,ComboBox仍然显示相同的项目.

这有什么不对?我的方法是错误的还是我只需要告诉绑定刷新自己?我没有发现如何做到这一点.

Jos*_*zzi 6

你可能"编辑控制器后面的数组",这颠覆了KVO机制.

你说:

我有一个绑定到NSArrayController的NSMutableArray.

怎么样?阵列在哪里?在一个文档中,可通过符合KVC/KVO的-myArray/-setMyArray访问:访问器集?

我敢打赌你直接告诉"myArray"ivar -removeAllObjects,对吧?这些KVC/KVO访问器如何"知道"阵列发生了变化?

答案是,他们没有.如果您真的要替换整个数组,那么您需要将您的文档(或拥有该数组的任何人)告诉-setMyArray:到一个全新的数组.这将触发正确的KVO呼叫.

......但是,你真的不需要一个可变数组,对吗?如果您只想替换数组中的单个项,则需要使用索引访问器:

(文档 - 请参阅"To-Many Properties的集合访问器模式"部分) http://tinyurl.com/yb2zkr5

  • 我用Outlet修复了ArrayController和消息rearrangeObjects的问题.这样我在组合框中有了更新的数组. (3认同)