0

我是核心数据的新手。

在数据模型中,我有实体:

  • Song
  • Playlist

这是关系:

  • 每一个都属于Songno、one或multiplePlaylist

我已经像这样将关系添加到模型中。
我还建立了反向多对多关系

现在我的问题。

Playlist现在有一个NSSet与所有的Songs。
所以我可以通过playlist.songs.

我可以Song使用 a获取任何特定的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特定播放列表的 s ,而不必用 过滤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]

编辑如果 Songs 和 Playlist 之间存在多对多关系,您可以定义playlistsSongPlaylist的多对多关系,定义为与 的反向关系songs。那么以下谓词应该起作用:

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