7

我有一个包含 lastName 和 firstName 属性的实体。由于超出此问题范围的原因,我想要一个 fullName 属性,该属性被计算为 firstName + space + lastName 的串联。

因为这纯粹是一个计算值,不需要重做/撤消或瞬态属性的任何其他更复杂的方面(合并等),我的直觉告诉我只需覆盖 getter 方法以返回所述计算值。阅读表明,如果我这样做,我唯一关心的是它是否符合 KVO,我可以通过使用 keyPathsForValuesAffectingVolume 来解决这个问题,以确保任何观察 fullName 的人对 firstName 或 lastName 触发通知的更改。

我错过了什么吗?我正在检查,因为我是这个环境的初学者。

4

1 回答 1

2

我对此也很陌生,所以我不完全确定我的答案,但据我所知,你是正确的。

- (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];
}
于 2011-05-17T18:05:25.947 回答