歌曲(播放列表)<< ----> (歌曲)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。没有排序描述符,获取请求工作正常。
答案 0 :(得分:0)
我终于在我的问题中提到了上面提到的“方法1”。我获取了ListToSong实体并使用obj.song获取相关的Song对象。我使用了relationshipKeyPathsForPrefetching来预取链接到ListToSong对象的歌曲对象。