gpt4 book ai didi

objective-c - 获取反向关系,而不是 Core Data 中的 NSSet

转载 作者:行者123 更新时间:2023-11-28 22:42:31 24 4
gpt4 key购买 nike

我是 Core Data 的新手。

在数据模型中我有实体:

  • 歌曲
  • 播放列表

这是关系:

  • 每首Song不属于一个或多个Playlist

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

现在我的问题。

Playlist 现在有一个包含所有 SongNSSet
所以我可以通过 playlist.songs 访问它们。

我可以使用 NSPredicate 获取任何特定的 Song:

- (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,而不必使用 NSPredicate 过滤 NSSet ,因为它更快。

我该怎么做?

最佳答案

获取特定播放列表的歌曲,只需在用于获取Song对象的谓词中添加"playlist = %@",例如

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

或者,如果播放列表由标题给出:

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

编辑 如果歌曲和播放列表之间存在多对多关系,您可以将播放列表定义为歌曲Playlist,与 songs 成反比关系。那么下面的谓词应该起作用:

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

关于objective-c - 获取反向关系,而不是 Core Data 中的 NSSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14125410/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com