我的应用程序中有很多保存的“轨道”对象,例如:
@interface Track : NSManagedObject
@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSString *artistName;
@end
如何使用NSFetchRequest(并且不带NSCounterSet)获得最受欢迎的artistName?
最佳答案
你这样做
将结果按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
是每个艺术家姓名出现的次数。您需要自己在该数组中找到最大值,因为不幸的是,您无法告诉获取请求按表达式值对结果进行排序。
关于ios - IOS核心数据:计算重复值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28721261/