2012-06-12 27 views
7

在這個測試Core Data項目中,我有從「客戶」到「產品」的一對多關係,這種關係被命名爲'產品'。客戶的屬性是'名稱',產品的屬性是'項目'。我子類的實體和Xcode中已經爲客戶如下:如何使用核心數據的添加和刪除(NSSet)訪問器方法?

@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節&的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交流cessor。

我假設生成的訪問方法addProducts有以促進對象的「設置」插入的東西,如:

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

但這種失敗。在這個嘗試中,我明白一個產品對象並沒有被明確地創建,因此,一個明確的產品分配沒有發生,但我想,或許,訪問者會照顧到這一點。

什麼,因此,是addProducts的正確用法,併爲此事,removeProducts

謝謝。

回答

13

您傳遞給addProducts的集合包含NSString,而不是Products。

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]; 

本身,訪問者無法知道你首先給它的字符串是什麼。你必須提供一個包含正確類型實體的集合。這就是說,你可以定義你自己的訪問器,獲取一組字符串並在你的關係中插入正確初始化的產品:addProductsWithStrings:per example。

相關問題