在cocoa绑定中包含两个属性

时间:2014-10-24 04:38:24

标签: macos cocoa core-data cocoa-bindings

假设我有一个名为Person的核心数据实体,其属性为firstNamelastName

我想在tableView中显示该人的全名或firstName + lastName,只要firstName或lastName以典型的可可绑定方式更新,就会更新。

我需要绑定什么才能使其工作?我正在考虑绑定到一个方法,该方法只返回基于这两个属性的格式化字符串,然后找出一些方法来触发该方法的更新,如果它所依赖的两个中的任何一个都被更新,但不是确定如何/在哪里发生。

1 个答案:

答案 0 :(得分:1)

你想为它创建一个名为fullNameregister dependent keyPaths的吸气剂。

顺便提一下,代码正是你想要的东西。

- (NSString*) fullName
{
  return [NSString stringWithFormat:@"%@ %@",firstName,lastName];
} 

+ (NSSet *)keyPathsForValuesAffectingFullName {
    return [NSSet setWithObjects:@"lastName", @"firstName", nil];
}

每当firstNamelastName更新时,fullName的KVO观察员都会收到更改后的通知。这包括绑定到fullName的项目。

你可以用这种模式做like have changes in an object graph trigger recalculation of properties describing the object graph。在那里我有一个小技巧,我从子类中调用一个空的setter来强制重新计算依赖于父对等children keyPath的关系。这避免了Apple建议(和痛苦)注册KVO观察员的模式。只要您拥有子类中相关键路径中的代码,就可以让子实例方法简单地调用父类上的依赖属性,该属性触发对使用依赖于键路径的getter的调用。孩子因此,在实践中要避免Apple建议让父类保持巨大痛苦的代码,这些代码注册为每个孩子的KVO观察者。