核心数据获取:按关系计数排序

时间:2012-06-20 07:00:45

标签: iphone core-data nsfetchrequest kvc

我正在尝试获取其中一个关系中具有最低计数的实体。该实体称为解决方案,它具有称为gamesFeaturedIn的多对多关系,该关系链接到Game对象。所以我这样做(使用RestKit便捷方法):

Solution* lowestPlayedSolution = [Solution findFirstWithPredicate: nil sortedBy: @"gamesFeaturedIn.@count" ascending: NO];
NSUInteger lowestPlayedCount = [lowestPlayedSolution.gamesFeaturedIn count];

这会引发错误:

  

'含有KVC聚集体的Keepath,其中不应有一个;失败   处理游戏中的数据。@ count'

几年前我发现了一些类似问题的帖子。也许事情发生了变化,旧的帖子没有给出任何明确的答案,如何在不将所有对象存入内存并手动执行计算的情况下执行此操作。任何人吗?

编辑: 核心数据存储是SQLite支持的,因此我无法使用瞬态属性进行排序。

2 个答案:

答案 0 :(得分:1)

很抱歉打破坏消息,但事情没有改变,至少在iOS5中。主要有两种解决方法,都非常优雅。

  1. 你提到的那个,你之后在内存中进行排序。
  2. 您创建一个非瞬态属性来存储计数,并在每次添加或删除关系中的项目时更新它。

答案 1 :(得分:0)

创建一个临时属性(relationshipCount)和该属性的访问器,在该属性中返回该关系的计数。您现在可以对此属性进行排序。