【问题标题】:NSComboBox bound to NSArrayController not updating绑定到 NSArrayController 的 NSComboBox 未更新
【发布时间】:2014-01-11 10:58:07
【问题描述】:

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.availablePropertiesNSMutableArray(模型),self.availablePropertiesControllerNSArrayController

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

一些想法?

【问题讨论】:

    标签: cocoa cocoa-bindings nsarraycontroller nscombobox


    【解决方案1】:

    你已经接近了,你应该这样做:

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

    您已经将 arrayController 绑定到您的“availableProperties”变量,因此您只需更改您的变量即可更改 UI。这就是绑定的美妙之处。

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

    【讨论】:

    • 我试过了,但它没有按预期工作。首先,您可以绑定到可变集合。你只需要记住要么只通过控制器修改它,要么确保你的类是键值编码兼容可变对多关系。就我而言,我决定使用控制器,但我也尝试直接编辑集合,但它不起作用。顺便说一句,我写的更改控制器会更改我的数组变量,只是它不会更新 ui
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多