【问题标题】:Magical Record : sum aggregation神奇的记录:总和聚合
【发布时间】:2012-12-19 16:40:49
【问题描述】:

我正在对实体进行聚合,代码是:

 NSPredicate *betweenInterval = [NSPredicate predicateWithFormat:@"(date >= %@) AND (date < %@)", [interval.start value], [interval.end value]];

 NSNumber * nbPoints = [OMSPointsEventEntity MR_aggregateOperation:@"sum:" onAttribute:@"nbPoints" withPredicate:betweenInterval];

 return [nbPoints intValue];

而 NbPoints 为零,我不知道为什么...

提示:我的实体上的属性 NbPoints 是 NSNumber 应该是 int 吗?

【问题讨论】:

  • 你需要[interval.start值]吗?我认为可以只传递日期...另一件事要检查以确保您的谓词没有聚合返回数据...您可能会在不知情的情况下过滤掉所有内容。
  • 如果我用这个谓词做 MR_findall + [fetchedObjects valueForKeyPath:@"@sum.nbPoints"];我有我要找的钱。 [interval.start value] 是我自己的类,它返回一个 NSDate。

标签: objective-c core-data magicalrecord


【解决方案1】:

我不了解 MR,但在标准 Cord Data 中,聚合函数必须以 @ 开头。也许您应该在 MR 文档中查找此内容。

...MR_aggregateOperation:@"@sum"... // ???

如果你能得到一个包含所有PointsEvent实体的数组,你可以在获取之后自己计算:

NSNumber *sum = [fetchedObjects valueForKeyPath:@"@sum.nbPoints"]; 

至于属性数据类型,您的设置似乎是正确的:int32 或类似或 float 在核心数据模型中,NSNumber 在您的 NSManagedObject 子类中。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-06-14
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多