我的应用程序中有很多已保存的对象“轨道”:
@interface Track : NSManagedObject
@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSString *artistName;
@end
如何使用NSFetchRequest(并且没有NSCounterSet)获取最受欢迎的artistName?
答案 0 :(得分:3)
你可以通过
完成artistName
和NSExpression
,计算这些分组结果中artistName
的出现次数。首先使用count
函数创建表达式,命名为count
,然后返回整数结果:
NSExpression *countExpr = [NSExpression expressionWithFormat:@"count:(artistName)"];
NSExpressionDescription *countExprDesc = [[NSExpressionDescription alloc] init];
[countExprDesc setName:@"count"];
[countExprDesc setExpression:countExpr];
[countExprDesc setExpressionResultType:NSInteger64AttributeType];
然后创建获取请求以使用它,同时通过表达式值获取和分组:
NSFetchRequest *fr = [[NSFetchRequest alloc] initWithEntityName:@"Track"];
[fr setPropertiesToFetch:@[@"artistName", countExprDesc];
[fr setPropertiesToGroupBy:@["artistName"];
[fr setResultType:NSDictionaryResultType];
执行提取时,您将获得一系列字典。每个字典都有两个键:artistName
将是artistName
属性的值,count
将是每个艺术家名称出现的次数。
您需要自己查找该数组中的最大值,因为遗憾的是,您无法通过表达式值对提取请求进行排序。