谓词的“此处不允许多对多键”问题
Posted
技术标签:
【中文标题】谓词的“此处不允许多对多键”问题【英文标题】:"multiple to-many keys not allowed here" issue with a predicate 【发布时间】:2014-07-02 14:09:01 【问题描述】:我需要一些关于 NSFetchedResultsController
谓词的帮助。我的猜测是可以使用SUBQUERY
来完成,但我不知道怎么做。
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Album"];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"ANY tracks.playlistItems.playlist == %@", section.playlist];
使用此谓词执行获取请求时,我收到“此处不允许多对多键”错误。这是有道理的,因为专辑有多个曲目,而一个曲目有多个播放列表项。
因此,在这里使用自然语言是我想要从这个谓词中得到的:一张专辑,其中至少一首曲目至少有一个 playlistItems 具有以下播放列表。
我可以在我的谓词中使用 SUBQUERY 来实现这一点吗?
(我知道这可以使用 2 个获取请求轻松实现,但我想知道这是否可以使用一个请求来完成,因为我使用的是 NSFetchedResultsController
)
【问题讨论】:
【参考方案1】:是的,您可以使用 SUBQUERY 执行此操作。我只使用过几次子查询,但我认为你的应该是这样的:
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(tracks, $t, ANY $t.playlistItems.playlist == %@).@count != 0", section.playlist];
【讨论】:
以上是关于谓词的“此处不允许多对多键”问题的主要内容,如果未能解决你的问题,请参考以下文章