2012-06-12 16 views
7

Bu testte, Çekirdek Veriler projesinde "Müşteri" den "Ürünler" e çok bir ilişki var ve bu ilişki "ürünler" olarak adlandırılıyor. Müşterinin özniteliği 'isim' ve Ürünün özniteliği 'öğe' dir. Ben erişimci kullanabilirsinizÇekirdek verilerinin add & remove (NSSet) erişim yöntemleri nasıl kullanılır?

@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 

, diyelim bir müşteri (John Doe) ve iki öğe (Widget 1 & Widget 2) izin eklemek için: Ben varlıkları sınıflandırma ettik ve Xcode Müşteri için aşağıdaki üretti yöntem addProductsObject olarak aşağıdaki gibidir:

... 
// 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]; 
} 
... 

Bu çalışıyor ancak, eğer mümkünse, ben addProducts ac faydalanmak istiyorum Processor.

... 
NSSet *itemSet = [[NSSet alloc] initWithObjects:@"Widget 1", @"Widget 2", nil]; 
[custObj addProducts:itemSet]; 
... 

ama bu başarısız:

Ben gibi bir şey ile nesnelerin 'set' yerleştirilmesini kolaylaştırmak için vardır yöntem addProducts erişimci üretilen varsayıyorum. Bu denemede, bir ürün nesnesinin açıkça yaratılmamış olduğunu anlıyorum ve bu nedenle, açık bir ürün tahsisi gerçekleşmedi, ancak belki de erişimcinin bununla ilgileneceğini düşündüm.

nedenle ne addProducts doğru kullanımıdır ve bu konuda, removeProducts?

Teşekkürler.

cevap

13

Ürüne eklemek için kullandığınız ürün, NSString ürün değil, Ürün içerir.

NSMutableSet* products = [NSMutableSet set]; 

Products* product = [NSEntityDescription insertNewObjectForEntityForName: @"Products" inManagedObjectContext: context]; 
product.item = @"Widget 1"; 
[products addObject: product]; 

product = [NSEntityDescription insertNewObjectForEntityForName: @"Products" inManagedObjectContext: context]; 
product.item = @"Widget 2"; 
[products addObject: product]; 

[customer addProducts: products]; 

Şüphesiz, erişim sağlayıcısının, ilk etapta verdiğiniz dizelerin ne için olduğunu bilmenin bir yolu yoktur. Doğru türde varlıkları içeren bir set sağlamanız gerekir.

Kendi erişim noktanızı tanımlayabilir, bir dizi ipucu alabilir ve ilişkinize düzgün şekilde başlatılmış Ürünler ekleyebilirsin: addProductsWithStrings: örnek başına.

İlgili konular