В этом тестовом проекте 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?
Спасибо.