CoraData获取多个关系

时间:2014-07-14 17:25:45

标签: ios objective-c core-data

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

我在其中一个flickrfetcher练习中完成了斯坦福大学的课程。 我想从特定地区获取所有照片。 我有三个对这个例子很重要的实体。

区域

属性

  • REGION_ID
  • REGION_NAME
  • photoQty

关系

  • hasLocations

位置

属性

  • LOCATION_ID
  • LOCATION_NAME
  • photoQty

关系

  • isInRegion
  • hasPhotos

照片

属性

  • photo_ID
  • PHOTO_TITLE

关系

  • ofLocation

还有其他实体和其他属性和关系,但它们与此讨论无关。

我正在填写photo_title的桌面视图,并希望从特定区域获取所有照片。所以我试图

    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(请不是苹果文档)和子查询的一个很好的解释。我发现的解决方案似乎要么将其分解为多个查询或使用子查询,我还没有找到有关子查询的信息来源。

谢谢, 芯片

1 个答案:

答案 0 :(得分:0)

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

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