将NSTextField绑定到对象实例方法?

时间:2012-01-06 00:16:54

标签: cocoa core-data cocoa-bindings

我在一个对象上有一个实例方法,它根据其他一些对象吐出一个字符串。我可以将此实例方法绑定到字段吗?

2 个答案:

答案 0 :(得分:0)

创建NSString属性,打开nib文件并将文本字段的value绑定到属性。然后,您对该属性所做的任何更改都将反映在文本字段中。

答案 1 :(得分:0)

只有在为绑定实现相应的setter方法以尝试将中的更改写入时,才能将getter实例方法绑定到字段的值。 (其他一些绑定类型不需要setter)

设置者可以为空。

例如,这用于显示实例子树中新项目的数量:

- (NSNumber*) numberOfNewItems
{
    NSUInteger total = 0;

    for (childItem* ci in self.items)
        total += (ci.isNewValue) ? ci.items.count : 0;

    return @(total);
}

// Does nothing but allows binding to above to be recalculated
- (void) setNumberOfNewItems:(NSNumber*)number { }

这使双向绑定感到高兴。如果您没有设置器,则会出现与不符合KVC的keypath相关的错误。 (除非你对像“标题”或“工具提示”这样的单向绑定 - 那些不需要setter。但是setter可以通过getter重新计算这些标题和工具提示。)

请注意,在childItems中,您可以这样做:

self.isNewValue = NO;
[self.parent setNumberOfNewItems:nil]; // Trigers KVO for binding (does nothing else)

...这比让父母注册为所有孩子的KVO观察者容易得多。

如果您希望实例中的其他属性重新触发getter,则可以添加此类方法:

+ (NSSet *)keyPathsForValuesAffectingNumberOfNewItems {
    return [NSSet setWithObjects:@"items", @"somethingElse", nil];
}