使用@sum等集合运算符进行NSTableColumn绑定

时间:2010-12-23 08:51:25

标签: cocoa macos binding nstablecolumn

Mac OS X. CoreData应用。由NSArrayController控制的NSTableView绑定到Country实体的托管对象上下文。 Country实体具有'name'属性和to-many关系,'branches',分支实体。 Branch实体具有'sales'属性(NSNumber)。

NSTableView有两个NSTableColumns。第一个显示国家的名称。第二个应显示该国家所有分支机构的总销售额。

第一列的值绑定到NSArrayController的arrangeObjects,模型键路径为'name'。没问题。

第二列的值绑定到NSArrayController的arrangeObjects,模型键路径为“branches。@ sum.sales”。这不起作用。我收到错误消息:“addObserver:forKeyPath:options:context:]不受支持。关键路径:@ sum.sales”

相反,如果我将“totalSales”方法添加到我的Country类中,方法实现如下:

- (NSNumber *)totalSales
{
    return [[self branches] valueForKeyPath:@"@sum.sales"];
}

然后我将列绑定到'totalSales'它工作正常。我对Collection Operators文档的理解是,它应该与简单地绑定到“branches。@ sum.sales”相同。我不明白为什么后者不起作用。有任何想法吗?我在这个论坛和其他论坛上看到过类似的问题,但还没有看到解释或解决方案。

1 个答案:

答案 0 :(得分:0)

我不知道这仍然是你的主题,但它确实需要一个答案。

第二列的值应该以与第一列完全相同的方式绑定到NSArrayController。我不知道你为什么要这样做,以及你想要实现的目标。

您的第一个任务是将表列绑定到数组列,这对所有列和类型的工作方式相同。

第二个任务是获取绑定到某个其他对象的某个NSTableColumn的总和,如NSTextfield。这是这样做的:

    [totalCountField bind: @"value" toObject: arrayController
          withKeyPath:@"arrangedObjects.@sum.price" options:nil];