- У меня есть объект песни и объект списка воспроизведения.
- В плейлисте может быть несколько песен, и песни могут быть связаны с несколькими плейлистами.
- У меня есть объект ListToSongs, который поддерживает порядок, в котором песни были добавлены в список воспроизведения. Я не использую «Упорядоченное отношение» в ios5 (я знаю о его существовании и мне нужен больший контроль над моей моделью), и я сохраняю порядок в поле «sortOrder» в сущности PlayListToSong. Итак, схема моделируется как (имена отношений указаны в скобках ниже):
Песня (плейлисты) ‹‹----> (песня) ListToSong (плейлист) ‹---->> (песни) Список
Я хочу получить все песни для данного списка воспроизведения с помощью запроса на выборку.
Следующий запрос на ListToSong работает. Это извлекает все объекты PlayListToSong, и я могу использовать 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?
Обратите внимание, что единственная проблема заключается в том, как получить в конце «order by t1.ZSORTORDER», поскольку я не могу правильно указать sortDescriptor. Запрос на выборку отлично работает без дескриптора сортировки.