In questo progetto Core Data di test, ho una relazione uno a molti da "Cliente" a "Prodotti" e questa relazione è denominata "prodotti". L'attributo del cliente è "nome" e l'attributo del prodotto è "oggetto". Ho sottoclasse entità e Xcode ha prodotto il seguente per il Cliente:Come utilizzare i metodi di accesso add & remove (NSSet) dei dati di base?
@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
Per aggiungere, diciamo, un cliente (John Doe) e due elementi (Widget 1 & Widget 2), posso usare la funzione di accesso metodo addProductsObject come segue:
...
// 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];
}
...
Questo funziona bene, ma, se possibile, mi piacerebbe fare uso dei addProducts ac sore.
sto supponendo che la funzione di accesso generato metodo addProducts è lì per facilitare l'inserimento di un 'set' di oggetti con qualcosa come:
...
NSSet *itemSet = [[NSSet alloc] initWithObjects:@"Widget 1", @"Widget 2", nil];
[custObj addProducts:itemSet];
...
ma questo fallisce. In questo tentativo, comprendo che un oggetto prodotto non è stato creato in modo esplicito e, come tale, non è stata effettuata un'assegnazione esplicita del prodotto, ma ho pensato, forse, che l'accessor si sarebbe occupata di ciò.
cosa, quindi, è l'uso corretto di addProducts, e se è per questo, removeProducts?
Grazie.