Core data 如何使用核心数据';s增补&;删除(NSSet)访问器方法?
在这个测试核心数据项目中,我有一个从“客户”到“产品”的一对多关系,这个关系被命名为“产品”。客户属性为“名称”,产品属性为“项目”。我对实体进行了子分类,Xcode为客户生成了以下内容:Core data 如何使用核心数据';s增补&;删除(NSSet)访问器方法?,core-data,subclass,insertion,nsset,Core Data,Subclass,Insertion,Nsset,在这个测试核心数据项目中,我有一个从“客户”到“产品”的一对多关系,这个关系被命名为“产品”。客户属性为“名称”,产品属性为“项目”。我对实体进行了子分类,Xcode为客户生成了以下内容: @interface Customer : NSManagedObject @property (nonatomic, retain) NSString * name; @property (nonatomic, retain) NSSet *products; @end @interface Custo
@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)和两个项目(小部件1和小部件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的集合包含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
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];