gpt4 book ai didi

core-data - 如何使用核心数据的添加和删除(NSSet)访问器方法?

转载 作者:行者123 更新时间:2023-12-04 10:27:43 25 4
gpt4 key购买 nike

在这个测试核心数据项目中,我有一个从“客户”到“产品”的一对多关系,这种关系被命名为“产品”。客户的属性是“名称”,产品的属性是“项目”。我已经对实体进行了子类化,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

要添加一个客户(John Doe)和两个项目(Widget 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];
}
...

这工作正常,但如果可能,我想使用 添加产品 访问器(accessor)。

我假设生成的访问器方法 添加产品 是否有利于插入“一组”对象,例如:
...
NSSet *itemSet = [[NSSet alloc] initWithObjects:@"Widget 1", @"Widget 2", nil];
[custObj addProducts:itemSet];
...

但这失败了。在这次尝试中,我了解尚未明确创建产品对象,因此,尚未进行明确的产品分配,但我认为,访问器可能会处理此问题。

因此, 的正确用法是什么?添加产品 ,就此而言, 移除产品 ?

谢谢。

最佳答案

您传递给 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:每个示例。

关于core-data - 如何使用核心数据的添加和删除(NSSet)访问器方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11005427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com