2012-06-12 20 views
7

Trong dự án Core Data thử nghiệm này, tôi có mối quan hệ một đến nhiều từ "Khách hàng" đến "Sản phẩm" và mối quan hệ này được đặt tên là 'sản phẩm'. Thuộc tính của khách hàng là 'name' và thuộc tính của sản phẩm là 'item'. Tôi đã subclassed các thực thể và Xcode đã sản xuất sau đây cho khách hàng:Làm thế nào để sử dụng các phương pháp bổ trợ thêm và loại bỏ dữ liệu cốt lõi (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 

Để thêm, giả sử, một khách hàng (John Doe) và hai mặt hàng (Widget 1 & Widget 2), tôi có thể sử dụng accessor phương pháp addProductsObject như sau:

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

này hoạt động tốt, nhưng nếu có thể, tôi muốn tận dụng các addProducts ac cessor.

Tôi giả định rằng tạo accessor phương pháp addProducts ở đó để thuận tiện cho việc chèn của một 'đặt' của các đối tượng với cái gì đó như:

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

nhưng điều này thất bại. Trong thử nghiệm này, tôi hiểu một đối tượng sản phẩm đã không được tạo ra một cách rõ ràng và, như vậy, việc phân công sản phẩm rõ ràng đã không diễn ra nhưng tôi nghĩ, có lẽ, người truy cập sẽ quan tâm đến điều đó.

Do đó, việc sử dụng chính xác thêmSản phẩm là gì và trong trường hợp này, xóaSản phẩm?

Cảm ơn.

Trả lời

13

Bộ bạn đang chuyển để thêmSản phẩm chứa NSString, chứ không phải Sản phẩm.

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

Mỗi lần, người truy cập không có cách nào để biết bạn đã đặt chuỗi nào trước tiên. Bạn phải cung cấp một tập hợp chứa đúng loại thực thể.

Điều đó nói rằng, bạn có thể xác định người truy cập của riêng bạn, lấy một tập hợp các chuỗi và chèn đúng các sản phẩm được khởi tạo trong mối quan hệ của bạn: addProductsWithStrings: ví dụ.

Các vấn đề liên quan