kan*_*roo 7 core-data subclass nsset insertion
在这个测试核心数据项目中,我有一个从"客户"到"产品"的一对多关系,这种关系被命名为"产品".客户的属性为"名称",产品的属性为"项目".我已经将实体子类化,Xcode为客户生成了以下内容:
@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
Run Code Online (Sandbox Code Playgroud)
要添加,比方说,一个客户(John Doe)和两个项目(Widget 1&Widget 2),我可以使用accessor方法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];
}
...
Run Code Online (Sandbox Code Playgroud)
这工作正常,但如果可能的话,我想使用addProducts访问器.
我假设生成的访问器方法addProducts是为了方便插入一组"对象",例如:
...
NSSet *itemSet = [[NSSet alloc] initWithObjects:@"Widget 1", @"Widget 2", nil];
[custObj addProducts:itemSet];
...
Run Code Online (Sandbox Code Playgroud)
但这失败了.在这个尝试中,我理解一个产品对象尚未明确创建,因此,没有发生明确的产品分配,但我想,也许,访问者会照顾它.
那么,addProducts的正确用法是什么呢?就此而言,removeProducts?
谢谢.
fab*_*ier 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];
Run Code Online (Sandbox Code Playgroud)
本身,访问者无法知道你首先给它的字符串是什么.您必须提供包含正确类型实体的集合.
也就是说,您可以定义自己的访问器,获取一组字符串并在您的关系中插入正确初始化的产品:addProductsWithStrings:每个示例.
归档时间: |
|
查看次数: |
8934 次 |
最近记录: |