2011-05-17 11 views
7

私は、lastNameとfirstName属性を含むエンティティを持っています。この質問の範囲を超えて理由から、firstName + space + lastNameの連結として計算されるfullName属性が必要です。コアデータトランジエントの計算された属性

これは純粋に計算された値であり、一時的な属性(マージなど)のやり直しや元に戻すなどの洗練されていない要素がないため、私の嫌なことは、計算された値。私がこれを行うと、KVOに準拠しているかどうか、keyPathsForValuesAffectingVolumeを使用して解決できるかどうか、fullNameで観察されている人のfirstNameまたはlastNameトリガー通知への変更を確実にすることだけです。

何か不足していますか?私はこの環境の初心者だからチェックしている。

ウェイン

答えて

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]; 
} 
+0

ハイマーク。応答していただきありがとうございます。私の唯一の疑問は[self primitiveFullName:nil]と[self primitiveFullName:tmp]へのあなたの呼び出しと関係があります。ユーザーがゲッターを介してアクセスする唯一の方法はゲッターであり、ゲッターは常に正しい値を返します。なぜ、一時プロパティーに格納されているものに心配していますか?注意してください、私はあなたがそうすることで絶対に正しいと思う...私はちょうど私がこのすべてに微妙なものを見逃しているかどうかを見るために釣りをしています。 – wayne

+0

こんにちは。また、好奇心のため、[self setPrimitiveFirstName:aFirstName]を使用してプリミティブ値を設定できますが、[self setPrimitiveValue:aFirstName forKey:@ "firstName"]というフォームを使用する必要があります。再び、釣りだけ! – wayne

+0

おっと。私はprimitiveFullName:setPrimitiveFullNameの代わりに使用していたことを認識していませんでした: –

関連する問題