Как использовать методы доступа добавления и удаления основных данных (NSSet)?

В этом тестовом проекте Core Data у меня есть отношение «один ко многим» от «Клиент» к «Продукты», и это отношение называется «продукты». Атрибут клиента — «имя», а атрибут продукта — «товар». Я разделил объекты на подклассы, и Xcode выдал следующее для Customer:

@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

Чтобы добавить, скажем, одного клиента (John Doe) и два элемента (Widget 1 и Widget 2), я могу использовать метод доступа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?

Спасибо.

7
задан kangaroo 12 June 2012 в 21:52
поделиться