如何在多对多关系中使用sortDescriptor作为属性

  1. 我有一个歌曲实体和一个播放列表实体。
  2. 播放列表可以有多首歌曲和歌曲可以链接到多个播放列表。
  3. 我有一个ListToSongs实体,它维护歌曲添加到播放列表的顺序。 我没有在ios5中使用“Ordered Relationship”(我知道它的存在,我需要更多地控制我的模型)并且我通过PlayListToSong实体中的“sortOrder”字段存储顺序。 所以模式被建模为(关系名称写在下面的括号中):

歌曲(播放列表)<(歌曲)ListToSong(播放列表)>(歌曲)列表

我想使用获取请求获取给定PlayList的所有歌曲。

ListToSong的以下查询有效。 这将获取所有PlayListToSong objs,我可以使用obj.song来获取Song对象。 还返回sortOrder上排序的数据。 效果很好。 (下面的代码片段是出于简洁的原因使用MagicalRecord编写的)。

songFilter = [NSPredicate predicateWithFormat:@"playlist == %@", filterList]; linkObjs = [FRListToSongs MR_findAllSortedBy:@"sortOrder" ascending:YES withPredicate:songFilter inContext:ctxt]; 

对Song实体的以下查询导致崩溃。 如果我删除排序描述符并只提取,它就可以了。 所以问题在于sortDescriptor“playlists.sortOrder”,它试图根据ListToSongs实体中的属性进行排序。

 songFilter = [NSPredicate predicateWithFormat:@"ANY playlists.playlist == %@", filterList]; songs = [FRSong MR_findAllSortedBy:@"playlists.sortOrder" ascending:YES withPredicate:songFilter inContext:ctxt]; 

在纯SQL(下面给出)中,我试图在Song和ListToSong之间进行连接,并按“sortOrder”字段进行排序。

 SELECT DISTINCT 0, t0.Z_PK, t0.Z_OPT, t0.ZNAME, t0.ZSEQ FROM ZSONG t0 JOIN ZFRLISTTOSONGS t1 ON t0.Z_PK = t1.ZSONG WHERE t1.ZPLAYLIST = ? order by t1.ZSORTORDER 

如何将上述SQL映射到coredata语法并提供正确的sortDescriptor?

请注意唯一的问题是如何在最后获得“t1.ZSORTORDER的订单”,因为我无法正确指定sortDescriptor。 没有排序描述符,获取请求工作正常。

我终于在我的问题中提到了上面提到的“方法1”。 我获取ListToSong实体并使用obj.song获取相关的Song对象。 我使用了relationshipKeyPathsForPrefetching来预取链接到ListToSong对象的歌曲对象。