リレーションによってリンクされている iOS アプリのエンティティをいくつか取得しました。簡単な例を作るために、次のような関係 (1 対多) があると仮定します。
company <--->> person
モデル生成にはxcode 4.6とコアデータモデリングツールを使用しているため、最終的には
//Company.h
@class Person;
@interface Company : NSManagedObject
@property (nonatomic, retain) NSString * company_name;
@property (nonatomic, retain) NSNumber *has_changed;
@property (nonatomic, retain) NSSet *person;
@end
@interface Company (CoreDataGeneratedAccessors)
- (void)addPersonObject:(Person *)value;
- (void)removePersonObject:(Person *)value;
- (void)addPerson:(NSSet *)values;
- (void)removePerson:(NSSet *)values;
@end
//Company.m
#import "Company.h"
#import "Person.h"
@implementation Company
@dynamic company_name;
@dynamic has_changed;
@dynamic person;
@end
と
//Person.h
@class Company;
@interface Person : NSManagedObject
@property (nonatomic, retain) NSString * first_name;
@property (nonatomic, retain) NSString * last_name;
@property (nonatomic, retain) Company *company;
@end
//Person.m
#import "Person.h"
#import "Company.h"
@implementation Person
@dynamic first_name;
@dynamic last_name;
@dynamic company;
@end
TRUE
ここで、次のいずれかが発生するたびにブール値 (Core Data で NSNumber として実装) 属性 has_changed を設定したいとします。
- もちろん has_changed 属性自体を除いて、会社エンティティの属性が変更されます (これによりループが発生するため)
- person エンティティの属性が変更された
このようなものを実装するための最良の (実装が簡単 + 処理が速い) 方法は何でしょうか? 私が知ることができたのは、2つのオプションがあるということです:
ただし、objective-c 2.0、core-data / cocoa、または iOS の変更により、このトピックに関連するものはすべて古くなっているようです。たとえば、コア データ モデリング エディターを使用してアクセサー メソッドを自動的に生成しても、ARC を有効にして xcode 4.6 を使用すると機能しないようです。その上)。
また、ドキュメントの内容が少しわかりにくいと思います。これを実装する最良の方法は何ですか?KVO? カスタムアクセサー? 両方のビット、または完全に異なるものでさえありますか? そして、与えられた例の可能な実装はどのようになりますか?