【问题标题】:IOS Core Data : Count Duplicated valuesIOS核心数据:计算重复值
【发布时间】:2015-02-25 14:14:22
【问题描述】:

我的应用中有很多保存的对象“曲目”:

@interface Track : NSManagedObject
@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSString *artistName;
@end

如何使用 NSFetchRequest(并且不使用 NSCounterSet)获得最受欢迎的艺术家姓名?

【问题讨论】:

  • 适用于 iOS 还是 OSX?

标签: ios objective-c core-data nspredicate nsfetchrequest


【解决方案1】:

你这样做

  • 将结果按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];

当您执行 fetch 时,您会得到一个字典数组。每个字典都有两个键:artistName 将是您的 artistName 属性的值,count 将是每个艺术家姓名出现的次数。

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

【讨论】:

    猜你喜欢
    • 2012-06-01
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多