神奇的记录:总和聚合

Posted

技术标签:

【中文标题】神奇的记录:总和聚合【英文标题】: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。 【参考方案1】:

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

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

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

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

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

【讨论】:

我没有找到这方面的任何文档,这里有几个我找到的链接(函数代码:github.com/magicalpanda/MagicalRecord/blob/master/MagicalRecord/…,官方github页面:github.com/magicalpanda/MagicalRecord) 好吧,恭喜您决定使用未记录的框架。您是否尝试过第二种解决方案?

以上是关于神奇的记录:总和聚合的主要内容,如果未能解决你的问题,请参考以下文章

核心数据和神奇的记录

神奇的记录排序错误

神奇的记录只保存内存

神奇的 SQL 之层级 → 为什么 GROUP BY 之后不能直接引用原表中的列

神奇的记录 将大量数据保存到数据库

一对多的神奇记录