1. ステップ
CoreData のセッターをオーバーライドする場合は、次のドキュメントに従ってください。
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdAccessorMethods.html#//apple_ref/doc/uid/TP40002154-SW14
ここで重要なのは、例のように「プリミティブ」アクセサーを使用することです。
- (void)setAddress:(NSString *)newAddress
{
[self willChangeValueForKey:@"address"];
[self setPrimitiveAddress:newAddress];
[self didChangeValueForKey:@"address"];
}
その後、属性を設定しようとする無限ループは発生しません。
2.ステップ
アドレスの質問に適用すると、パートナーのアドレスも設定できます。
コードは次のように変わります
- (void)setAddress:(NSString *)newAddress
{
[self willChangeValueForKey:@"address"];
[self setPrimitiveAddress:newAddress];
[self didChangeValueForKey:@"address"];
[self.partner willChangeValueForKey:@"address"];
[self.partner setPrimitiveAddress:newAddress];
[self.partner didChangeValueForKey:@"address"];
}
noa が提案する代替案:
- (void)setAddress:(NSString *)newAddress
{
[self willChangeValueForKey:@"address"];
[self setPrimitiveAddress:newAddress];
if (![self.partner.address isEqual:newAddress])
[self.partner setAddress:newAddress];
[self didChangeValueForKey:@"address"];
}