NSComboBox绑定到NSArrayController不更新

时间:2014-01-11 10:58:07

标签: cocoa cocoa-bindings nsarraycontroller nscombobox

我在NSComboBox元素和NSArrayController之间存在绑定问题。

所有绑定都在IB中设置。 NSComboBox元素具有以下绑定:

  • 内容:绑定到NSArrayController个实例,键:arrangedObjects
  • 内容值:绑定到NSArrayController实例,键:arrangedObjects.name

NSArrayController元素以下列方式绑定:

  • 内容数组:绑定到File's Owner,关键路径为:availablePropertiesNSMutableArray

在代码中,我有一个方法,当窗口打开时和一些事件触发后调用。

代码如下:

NSMutableArray* newAvailable = ...; //compute the new properties to be displayed. 

//now I want to replace all the properties with the new one
if ([self.availableProperties count] > 0)
    [self.availablePropertiesController removeObjects:self.availableProperties];
[self.availablePropertiesController addObjects:newAvailables];

其中self.availablePropertiesNSMutableArray(模型)而self.availablePropertiesControllerNSArrayController

当窗口打开时,组合框已正确填充。 但是当事件触发时我执行上面的语句,我可以看到正确填充后备数组,但组合框是完全空的。

一些想法?

1 个答案:

答案 0 :(得分:0)

你很接近,你应该这样做:

NSMutableArray* newAvailable = ...; //compute the new properties to be displayed. 
self.availableProperties = newAvailable;

您已将arrayController绑定到'availableProperties'变量,因此更改UI所需要做的就是更改变量。这就是绑定之美。

另外,你的'availableProperties'可能应该是NSArray,而不是NSMutableArray,因为如果你不小心在NSMutableArray的中间插入了一个对象,那么arrayController的绑定就不会注意到 - 它只会注意到整个'availableProperties'实例变量发生了变化,而不是变异内部的变化。