4
  1. Song Entity と Playlist Entity があります。
  2. プレイリストには複数の曲を含めることができ、曲は複数のプレイリストにリンクできます。
  3. プレイリストに追加された曲の順序を維持する ListToSongs エンティティがあります。私はios5で「Ordered Relationship」を使用していません(その存在を認識しており、モデルをより詳細に制御する必要があります)、PlayListToSongエンティティの「sortOrder」フィールドで順序を保存します。したがって、スキーマは次のようにモデル化されます (関係名は以下の括弧内に記述されています)。

曲 (プレイリスト) <<----> (曲) ListToSong (プレイリスト) <---->> (曲) リスト

フェッチ要求を使用して、特定の PlayList のすべての曲を取得したいと考えています。

ListToSong に対する次のクエリは機能します。これにより、すべての PlayListToSong obj が取得され、obj.song を使用して Song オブジェクトを取得できます。同様に、sortOrder でソートされたデータを返します。うまくいきます。(以下のコード スニペットは、簡潔にするために MagicalRecord を使用して記述されています)。

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

Song エンティティに対して次のクエリを実行すると、クラッシュが発生します。ソート記述子を削除してフェッチすると、機能します。そのため、ListToSongs エンティティの属性に基づいて並べ替えようとしている sortDescriptor "playlists.sortOrder" に問題があります。

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 を与えるにはどうすればよいですか?

sortDescriptor を正しく指定できないため、唯一の問題は、最後に「t1.ZSORTORDER による順序」を取得する方法であることに注意してください。フェッチ要求は、ソート記述子がなくても正常に機能します。

4

1 に答える 1

0

私はついに私の質問で上記の「アプローチ1」を進めました。ListToSong エンティティを取得し、obj.song を使用して関連する Song オブジェクトを取得しました。RelationshipKeyPathsForPrefetching を使用して、ListToSong オブジェクトにリンクされた曲オブジェクトをプリフェッチしました。

于 2012-09-17T08:35:21.307 に答える