我是核心数据的新手,我不知道如何使用核心数据编写这样的查询。
我在架构中有两个实体专辑和歌曲。专辑与歌曲通过一对多关系相关,关系名称是曲目。我已经编写了查询来获取所有专辑,并且运行良好。但现在我想在这方面做些小改动,这样我就不会得到包含 0 首歌曲的专辑。我试图根据请求设置谓词,例如
tracks.@count != 0
tracks.@count != nil
但这不起作用可能是因为故障?我是否需要预取关系或其他东西。我不想在专辑中添加属性歌曲计数,我只需要计数歌曲。编写这样的查询的最佳方法是什么?提前致谢 !
代码 -
NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:@"Album" inManagedObjectContext:[self managedObjectContext]];
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)];
[request setSortDescriptors:[NSArray arrayWithObject:sort]];
NSPredicate *albumPredicate = [NSPredicate predicateWithFormat:@"tracks.@count > 0"];
[request setPredicate:albumPredicate];
这是我打开调试模式后在控制台上看到的
CoreData: sql: SELECT 0, t0.Z_PK FROM ZALBUM t0 WHERE (SELECT COUNT(*) FROM ZTRACK t1 WHERE (t0.Z_PK = t1.ZALBUM) ) > ? ORDER BY t0.ZNAME COLLATE NSCollateNoCase
代码有什么问题?