我的应用程序中有很多保存的“轨道”对象,例如:

@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];


当执行提取时,您将获得一个字典数组。每个词典都有两个键:artistNameartistName属性的值,而count是每个艺术家姓名出现的次数。

您需要自己在该数组中找到最大值,因为不幸的是,您无法告诉获取请求按表达式值对结果进行排序。

关于ios - IOS核心数据:计算重复值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28721261/

10-09 02:40