CoraData 获取多个关系

Posted

技术标签:

【中文标题】CoraData 获取多个关系【英文标题】:CoraData fetch over multiple relationships 【发布时间】:2014-07-14 17:25:45 【问题描述】:

我在使用 CoreData 时遇到问题,我知道部分原因是因为我非常熟悉数据库编程和 CoreData,因为我已经阅读了几个地方,而不是数据库。我想问题的一部分是它似乎像牛一样走路,像鸭子一样嘎嘎叫,这让我很沮丧。

我正在完成斯坦福课程的一项 flickrfetcher 练习。 我想获取特定区域的所有照片。 我有三个对这个例子很重要的实体。

地区

属性

region_ID region_Name 照片数量

关系

有位置

位置

属性

location_ID location_name 照片数量

关系

isInRegion 有照片

照片

属性

photo_ID 照片标题

关系

位置

还有其他实体和其他属性和关系,但与本次讨论无关。

我正在填充 photo_title 的 tableview,并希望获取来自特定区域的所有照片。所以我正在尝试

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Photo"];
request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:NO]];

request.predicate=[NSPredicate predicateWithFormat:@"ANY ofLocation.isInRegion.regionName=%@",self.regionName];
NSError *error;
NSArray *photoResults = [context executeFetchRequest:request error:&error];

我收到.768 FlickrRegions[2592:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath name not found in entity <NSSQLEntity Photo id=3>

我猜这是因为谓词,但我无法找到一个很好的解释来说明如何设置 coreData 显然是一个复杂的谓词。

作为第二部分。有人可以指出我对coredata(不是苹果文档)和子查询的一个很好的解释。我找到的解决方案似乎要么将其分解为多个查询,要么使用子查询,但我还没有找到有关子查询的信息来源。

谢谢, 芯片

【问题讨论】:

【参考方案1】:

出现问题是因为您尝试按name 对照片进行排序,而没有这样的属性。根据您的描述,我看到 Photo 具有 photo_title 属性,因此将您的排序描述符调整为:

request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"photo_title" ascending:NO]];

【讨论】:

天啊。我不敢相信我错过了。我本可以发誓我评论了这一点。每次我必须进行新的查询并更改/评论我不需要的内容时,我一直在抓取相同的代码块。谢谢,很抱歉浪费您的时间。

以上是关于CoraData 获取多个关系的主要内容,如果未能解决你的问题,请参考以下文章

获取多个实体之间没有关系

用于获取多个表数据的 Hasmany 关系

无法获取加入多个 Eloquent 关系的数据

如何获取具有多个表关系的帖子?

OracleHome是哪个目录?

多个 Laravel Eloquent 关系未显示来自所有关系的数据