0

Core Data は初めてです。

データモデルにはエンティティがあります:

  • Song
  • Playlist

これは関係です:

  • すべてが no、1 つまたは複数のSongに属しますPlaylist

このようにモデルに関係を追加しました。
逆のTo-Many Relationshipも作成しました。

今私の質問。

はすべて s の になりPlaylistました。 だから私は経由でそれらにアクセスできます。NSSetSong
playlist.songs

Songを使用して特定のものを取得できますNSPredicate

- (NSArray *)fetchWithEntity:(NSString *)entity
                   predicate:(NSPredicate *)predicate
             sortDescriptors:(NSArray *)sortDescriptors
                       error:(NSError **)error {

    NSManagedObjectContext *moc = [self managedObjectContext];
    NSEntityDescription *entityDescription = [NSEntityDescription
                                              entityForName:entity
                                              inManagedObjectContext:moc];

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:entityDescription];
    [request setPredicate:predicate];
    [request setSortDescriptors:sortDescriptors];

    NSArray *fetchResult = [moc executeFetchRequest:request error:error];
    return fetchResult;
}

ただし、 で をフィルタリングするSongのではなく、特定のプレイリストの もフィルタリングできるようにしたいと考えています。単純に高速であるためです。NSSetNSPredicate

これどうやってするの?

4

1 に答える 1

2

特定のプレイリストの曲を取得します。オブジェクト"playlist = %@"のフェッチに使用される述語に追加するだけです。Song

[NSPredicate predicateWithFormat:@"playlist = %@ AND title CONTAINS[cd] %@",
             thePlaylist, songTitle]

または、プレイリストがタイトルで指定されている場合:

[NSPredicate predicateWithFormat:@"playlist.title = %@ AND title CONTAINS[cd] %@",
             playlistTitle, songTitle]

編集曲とプレイリストの間に多対多の関係がある場合は、からプレイリストplaylistsへの多対多の関係として、の逆の関係として定義できます。次に、次の述語が機能するはずです。songs

[NSPredicate predicateWithFormat:@"ANY playlist = %@ AND title CONTAINS[cd] %@",
             thePlaylist, songTitle]
于 2013-01-02T16:48:39.587 に答える