核心数据 - 关系

Posted

技术标签:

【中文标题】核心数据 - 关系【英文标题】:Core Data - Relationships 【发布时间】:2010-10-01 13:20:48 【问题描述】:

我要导入三个核心数据实体,它们是:

• 尺寸(名称、衣服(带有“衣服”实体的一对多)) • 衣服(名称、价格等...+2 关系) • shop(名称、衣服(一对多到“衣服”实体))

我已将商店导入到 shop 中,并将尺寸导入到 sizes 实体中。

现在我正在进口衣服。一开始我对尺寸和商店进行获取请求并将它们存储到一个数组中。

我正在遍历所有衣服并填充字典,然后我对数组的商店名称和大小进行谓词以获取每个衣服的托管对象,然后尝试根据关系存储它,但它不起作用?

如果我执行 [arrShops objectAtIndex: x] 并存储它是否有效?

预测我无法以其他任何方式获得正确的托管对象有什么问题?

或者有没有其他方法可以建立这种关系?

谢谢 詹姆斯

编辑


我有这样的方法来获取/预测商店:

- (void) getShops 

NSManagedObjectContext *moc = [(ImportingAppDelegate *) [[UIApplication sharedApplication] delegate] managedObjectContext]; 

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

[fetchRequest setEntity:[NSEntityDescription entityForName:@"Shop" inManagedObjectContext:moc]];

NSError *error;
arr_Manufacturers = [moc executeFetchRequest:fetchRequest error:&error];

NSLog(@"get: %@", [arr_Shops count]);

[fetchRequest release];


- (id) getShop:(NSString *)name 

NSPredicate * predicate = [NSPredicate predicateWithFormat:@"Shop = %@", name];
return [arr_Shops filteredArrayUsingPredicate:predicate];


然后在尝试存储时,我执行以下操作:

 moc_Clothes.Shop = [self getShop:@"Shop Name Variable"];

【问题讨论】:

您没有提供足够的信息。发布您的代码(和您的谓词)。 准确地描述它是如何不起作用的。 这有帮助吗? - 当应用程序崩溃并返回到弹簧板时,它也不起作用。我现在会尝试并得到错误,但我认为没有错误? 【参考方案1】:

首先,您的属性似乎不是KVC compliant(重要)。

其次,您似乎需要解释一个断开连接:您正在根据关系过滤 arr_Shops,但不清楚该数组的来源。在您的 getShops 方法(奇怪的是它实际上并没有返回任何东西)中,您将获取所有 Shop 实例的结果分配给 arr_Manufacturers。

我推荐一个名为 -shopsWithName: 之类的方法,它接受一个字符串名称并返回一个商店数组(总是允许多个结果的可能性)。在此方法中,您使用商店名称谓词运行获取请求。

第三是谓词本身。您要求的 Shop 实例等于某个字符串。它们都不是因为它们是商店,而不是字符串。由于您的结果是 Shop 实例,因此您的谓词应匹配该实体的属性。也许您的意思是“name == %@”。

【讨论】:

应该在发布前等待 10 分钟;o) - 知道了!首先,我知道我应该返回 getShops,我正在快速完成这个,我可以创建一个属性并手动创建 getter/setter。现在谈谈我如何修复它......将getShop返回到“NSArray”返回类型而不是“id”然后做了。 [[self getShop:@"Name"] objectAtIndex:0];现在建立关系。为您的帮助干杯!

以上是关于核心数据 - 关系的主要内容,如果未能解决你的问题,请参考以下文章

核心数据关系

核心数据:有没有办法使用隐含关系而不是真实关系来有效地查询模型?

核心数据:总是有反向关系。为啥?

核心数据关系的性能改进

核心数据与许多对等关系

关系保存时核心数据崩溃