假设我有一个名为Person
的核心数据实体,其属性为firstName
和lastName
。
我想在tableView中显示该人的全名或firstName + lastName,只要firstName或lastName以典型的可可绑定方式更新,就会更新。
我需要绑定什么才能使其工作?我正在考虑绑定到一个方法,该方法只返回基于这两个属性的格式化字符串,然后找出一些方法来触发该方法的更新,如果它所依赖的两个中的任何一个都被更新,但不是确定如何/在哪里发生。
答案 0 :(得分:1)
你想为它创建一个名为fullName
和register dependent keyPaths的吸气剂。
顺便提一下,代码正是你想要的东西。
- (NSString*) fullName
{
return [NSString stringWithFormat:@"%@ %@",firstName,lastName];
}
+ (NSSet *)keyPathsForValuesAffectingFullName {
return [NSSet setWithObjects:@"lastName", @"firstName", nil];
}
每当firstName
或lastName
更新时,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观察者。