我有一个包含lastName 和firstName 属性的实体。由于超出此问题范围的原因,我想要一个 fullName 属性,该属性作为firstName + space + lastName 的串联来计算。
因为这纯粹是一个计算值,不需要重做/撤消或瞬态属性的任何其他更复杂的方面(合并等),所以我的直觉告诉我只需重写 getter 方法即可返回所述计算值。阅读表明,如果我这样做,我唯一关心的是它是否符合 KVO,我可以通过使用 keyPathsForValuesAffectingVolume 来解决这个问题,以确保对firstName或lastName的更改为观察fullName的任何人触发通知。
我错过了什么吗?我正在检查,因为我是这个环境的初学者。
我对此也很陌生,所以我不完全确定我的答案,但据我了解,你是对的。
- (NSString *)fullName
{
[self willAccessValueForKey:@"fullName"];
NSString *tmp = [self primitiveFullName];
[self didAccessValueForKey:@"fullName"];
if (!tmp) {
tmp = [NSString stringWithFormat:@"%@ %@", [self firstName], [self lastName]];
[self setPrimitiveFullName:tmp];
}
return tmp;
}
- (void)setFirstName:(NSString *)aFirstName
{
[self willChangeValueForKey:@"firstName"];
[self setPrimitiveFirstName:aFirstName];
[self didChangeValueForKey:@"firstName"];
[self setPrimitiveFullName:nil];
}
- (void)setLastName:(NSString *)aLastName
{
[self willChangeValueForKey:@"lastName"];
[self setPrimitiveLastName:aLastName];
[self didChangeValueForKey:@"lastName"];
[self setPrimitiveFullName:nil];
}
+ (NSSet *)keyPathsForValuesAffectingFullName
{
return [NSSet setWithObjects:@"firstName", @"lastName", nil];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)