0

我对NSComboBox元素和NSArrayController.

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

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

元素通过NSArrayController以下方式绑定:

  • 内容数组:绑定到File's Owner,关键路径:(availableProperties这是一个NSMutableArray

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

代码如下:

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.availablePropertiesNSMutableArrayself.availablePropertiesControllerNSArrayController

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

一些想法?

4

1 回答 1

0

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

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

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

此外,您的 'availableProperties' 可能应该是一个 NSArray,而不是 NSMutableArray,因为如果您不小心在 NSMutableArray 中间插入了一个对象,arrayController 的绑定不会注意到——它只会在整个 'availableProperties'实例变量发生变化,而不是当它内部的某些东西发生变化时。

于 2014-01-11T12:54:22.640 回答