以上是我的核心数据关系。这是一个可可应用程序,有三个NSTableView显示流派,专辑和歌曲。 我想过滤GenreArrayController,使Genre TableView只显示Genre名称,其中专辑 - 歌曲长度为> 4。
当我在SongArrayController上使用谓词时:
[_songArrayController setFilterPredicate:[NSPredicate predicateWithFormat:@"length > 4"]];
结果是流派和专辑保持未过滤但歌曲表格会被过滤掉。是否有可能在流派上使用NSPredicate到达流派 - 专辑 - 歌曲。
我这样做是错误的,可以通过改变实体及其关系来实现。
答案 0 :(得分:1)
您可以将谓词与&&
组合使用,也可以使用更多的罗嗦复合谓词。您可以通过点表示法访问谓词中关系的键路径。因此,按类型过滤歌曲:
NSPredicate(format: "length > 4 && album.genre = %@", genreObject)
甚至
NSPredicate(format: "length > 4 && album.genre.name = %@", "Jazz")
答案 1 :(得分:1)
使用子查询,我可以过滤Genre
,以便Genre表只显示流派,其专辑包含大于4的歌曲数量:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(albums, $x, ANY $x.songs.count > 4).@count != 0"];