"这里不允许多对多密钥"谓词的问题

时间:2014-07-02 14:09:01

标签: ios sql core-data nspredicate nsfetchedresultscontroller

我需要一些关于NSFetchedResultsController的谓词的帮助。我的猜测是可以用SUBQUERY完成,但我无法弄清楚如何。

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Album"];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"ANY tracks.playlistItems.playlist == %@", section.playlist];

当使用此谓词执行获取请求时,我得到“此处不允许多对多键”错误。这是有道理的,因为专辑有多个曲目,并且曲目有多个播放列表项。

所以在这里使用自然语言是我想要的这个谓词:一个专辑,其中至少有一个音轨至少有一个播放列表具有以下播放列表。

我可以在谓词中使用SUBQUERY来实现这一点吗?

(我知道这可以通过2次获取请求轻松实现,但我想知道是否可以使用一个请求完成此操作,因为我使用的是NSFetchedResultsController

1 个答案:

答案 0 :(得分:7)

是的,你可以使用SUBQUERY来做到这一点。我曾经多次使用子查询,但我认为你的应该是这样的:

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(tracks, $t, ANY $t.playlistItems.playlist == %@).@count != 0", section.playlist];