このテストコアデータプロジェクトでは、「顧客」から「製品」まで1対多の関係があり、この関係は「製品」と呼ばれます。顧客の属性は「名前」であり、製品の属性は「アイテム」です。私はエンティティをサブクラス化し、Xcodeは顧客向けに次のものを作成しました。
@interface Customer : NSManagedObject
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSSet *products;
@end
@interface Customer (CoreDataGeneratedAccessors)
- (void)addProductsObject:(Products *)value;
- (void)removeProductsObject:(Products *)value;
- (void)addProducts:(NSSet *)values;
- (void)removeProducts:(NSSet *)values;
@end
たとえば、1人の顧客(John Doe)と2つのアイテム(Widget1とWidget2)を追加するには、アクセサメソッドaddProductsObjectを次のように使用できます。
...
// Add (1) customer object
Customer *custObj = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];
[custObj setValue:@"John Doe" forKey:@"name"];
// Add (2) products for John Doe
for (int foo=0; foo<2; foo++) {
self.product = [NSEntityDescription insertNewObjectForEntityForName:@"Products" inManagedObjectContext:context];
NSString *objString = [NSString stringWithFormat:@"Widget %d", foo];
self.product.item = objString;
[custObj addProductsObject:self.product];
}
...
これは問題なく機能しますが、可能であれば、 addProductsアクセサーを利用したいと思います。
生成されたアクセサーメソッドaddProductsは、次のようなオブジェクトの「セット」の挿入を容易にするためにあると想定しています。
...
NSSet *itemSet = [[NSSet alloc] initWithObjects:@"Widget 1", @"Widget 2", nil];
[custObj addProducts:itemSet];
...
しかし、これは失敗します。この試みでは、製品オブジェクトが明示的に作成されていないことを理解しているため、明示的な製品の割り当ては行われていませんが、おそらくアクセサーがそれを処理すると思いました。
したがって、 addProductsの正しい使用法は何ですか、さらに言えば、removeProductsは何ですか?
ありがとう。