IOS核心数据:计算重复值

IOS核心数据:计算重复值,ios,objective-c,core-data,nspredicate,nsfetchrequest,Ios,Objective C,Core Data,Nspredicate,Nsfetchrequest,我在我的应用程序中保存了很多对象“轨迹”: @interface Track : NSManagedObject @property (nonatomic, strong) NSString *title; @property (nonatomic, strong) NSString *artistName; @end 如何使用NSFetchRequest(并且不使用NSCounterSet)获取最流行的艺人姓名?您可以通过 按artistName对结果进行分组,以及 创建一个n表达式,用于

我在我的应用程序中保存了很多对象“轨迹”:

@interface Track : NSManagedObject
@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSString *artistName;
@end
如何使用NSFetchRequest(并且不使用NSCounterSet)获取最流行的艺人姓名?

您可以通过

  • artistName
    对结果进行分组,以及
  • 创建一个
    n表达式
    ,用于统计这些分组结果中出现的
    artistName
首先使用
count
函数创建表达式,将其命名为
count
,并返回整数结果:

NSExpression *countExpr = [NSExpression expressionWithFormat:@"count:(artistName)"];
NSExpressionDescription *countExprDesc = [[NSExpressionDescription alloc] init];
[countExprDesc setName:@"count"];
[countExprDesc setExpression:countExpr];
[countExprDesc setExpressionResultType:NSInteger64AttributeType];
然后,创建fetch请求以使用此函数,通过表达式值进行获取和分组:

NSFetchRequest *fr = [[NSFetchRequest alloc] initWithEntityName:@"Track"];
[fr setPropertiesToFetch:@[@"artistName", countExprDesc];
[fr setPropertiesToGroupBy:@["artistName"];
[fr setResultType:NSDictionaryResultType];
执行fetch时,将返回一个字典数组。每个字典将有两个键:
artistName
将是
artistName
属性的值,
count
将是每个艺术家名称出现的次数

您需要自己在该数组中找到最大值,因为很遗憾,您无法告诉fetch请求按表达式值对结果进行排序。

您可以通过

  • artistName
    对结果进行分组,以及
  • 创建一个
    n表达式
    ,用于统计这些分组结果中出现的
    artistName
首先使用
count
函数创建表达式,将其命名为
count
,并返回整数结果:

NSExpression *countExpr = [NSExpression expressionWithFormat:@"count:(artistName)"];
NSExpressionDescription *countExprDesc = [[NSExpressionDescription alloc] init];
[countExprDesc setName:@"count"];
[countExprDesc setExpression:countExpr];
[countExprDesc setExpressionResultType:NSInteger64AttributeType];
然后,创建fetch请求以使用此函数,通过表达式值进行获取和分组:

NSFetchRequest *fr = [[NSFetchRequest alloc] initWithEntityName:@"Track"];
[fr setPropertiesToFetch:@[@"artistName", countExprDesc];
[fr setPropertiesToGroupBy:@["artistName"];
[fr setResultType:NSDictionaryResultType];
执行fetch时,将返回一个字典数组。每个字典将有两个键:
artistName
将是
artistName
属性的值,
count
将是每个艺术家名称出现的次数

您需要自己在该数组中找到最大值,因为很遗憾,您无法告诉fetch请求按表达式值对结果进行排序。

您可以通过

  • artistName
    对结果进行分组,以及
  • 创建一个
    n表达式
    ,用于统计这些分组结果中出现的
    artistName
首先使用
count
函数创建表达式,将其命名为
count
,并返回整数结果:

NSExpression *countExpr = [NSExpression expressionWithFormat:@"count:(artistName)"];
NSExpressionDescription *countExprDesc = [[NSExpressionDescription alloc] init];
[countExprDesc setName:@"count"];
[countExprDesc setExpression:countExpr];
[countExprDesc setExpressionResultType:NSInteger64AttributeType];
然后,创建fetch请求以使用此函数,通过表达式值进行获取和分组:

NSFetchRequest *fr = [[NSFetchRequest alloc] initWithEntityName:@"Track"];
[fr setPropertiesToFetch:@[@"artistName", countExprDesc];
[fr setPropertiesToGroupBy:@["artistName"];
[fr setResultType:NSDictionaryResultType];
执行fetch时,将返回一个字典数组。每个字典将有两个键:
artistName
将是
artistName
属性的值,
count
将是每个艺术家名称出现的次数

您需要自己在该数组中找到最大值,因为很遗憾,您无法告诉fetch请求按表达式值对结果进行排序。

您可以通过

  • artistName
    对结果进行分组,以及
  • 创建一个
    n表达式
    ,用于统计这些分组结果中出现的
    artistName
首先使用
count
函数创建表达式,将其命名为
count
,并返回整数结果:

NSExpression *countExpr = [NSExpression expressionWithFormat:@"count:(artistName)"];
NSExpressionDescription *countExprDesc = [[NSExpressionDescription alloc] init];
[countExprDesc setName:@"count"];
[countExprDesc setExpression:countExpr];
[countExprDesc setExpressionResultType:NSInteger64AttributeType];
然后,创建fetch请求以使用此函数,通过表达式值进行获取和分组:

NSFetchRequest *fr = [[NSFetchRequest alloc] initWithEntityName:@"Track"];
[fr setPropertiesToFetch:@[@"artistName", countExprDesc];
[fr setPropertiesToGroupBy:@["artistName"];
[fr setResultType:NSDictionaryResultType];
执行fetch时,将返回一个字典数组。每个字典将有两个键:
artistName
将是
artistName
属性的值,
count
将是每个艺术家名称出现的次数


您需要自己在该数组中找到最大值,因为很遗憾,您无法告诉fetch请求按表达式值对结果进行排序。

是用于iOS还是OSX?是用于iOS还是OSX?是用于iOS还是OSX?是用于iOS还是OSX?