我是Core Data的新手。
在数据模型中,我有实体:
Song
Playlist
这是关系:
Song
属于no,one或多个Playlist
的我已经将这种关系添加到模型中。
我也做了反 To-Many Relationship 。
现在我的问题。
Playlist
现在有一个NSSet
,其中包含Song
个。{
所以我可以通过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
,而不必使用NSSet
过滤NSPredicate
,因为它只是更快
我该怎么做?
答案 0 :(得分:2)
获取特定播放列表的歌曲,只需将"playlist = %@"
添加到用于获取Song
个对象的谓词中,例如
[NSPredicate predicateWithFormat:@"playlist = %@ AND title CONTAINS[cd] %@",
thePlaylist, songTitle]
或者,如果播放列表由标题给出:
[NSPredicate predicateWithFormat:@"playlist.title = %@ AND title CONTAINS[cd] %@",
playlistTitle, songTitle]
编辑如果歌曲和播放列表之间存在多对多关系,则可以将playlists
定义为从歌曲到<的多个关系em>播放列表,与songs
成反比关系。然后下面的谓词应该有效:
[NSPredicate predicateWithFormat:@"ANY playlist = %@ AND title CONTAINS[cd] %@",
thePlaylist, songTitle]