我有一个有很多费用的类别实体。我想获得给定月份某个类别的所有费用总和:
- (NSNumber *)totalForMonth:(NSDate *)date
{
...
<pre><code>NSPredicate *sumPredicate = [NSPredicate predicateWithFormat:@"(ANY %@ <= expenses.created_at) AND (ANY expenses.created_at <= %@)",
[date beginningOfMonth], [date endOfMonth]];
NSFetchRequest *req = [[[NSFetchRequest alloc] init] autorelease];
[req setPredicate:sumPredicate];
[req setEntity:entity];
NSError *error;
NSArray *fetchedObjects = [managedObjectContext executeFetchRequest:req error:&error];
return [fetchedObjects valueForKeyPath:@"expenses.@sum.amount"];
</code></pre>
<p>}</p>
此代码的问题在于它会抛出异常,因为显然这不是在关系上使用@sum 的方式。
最佳答案
您使用具有正确语法的@sum。最有可能的是,您刚刚弄错了键路径的另一部分,例如“费用”而不是“费用”。或者,您可能获取了错误的实体。
如果您只想获取此总和,请执行属性获取并将返回类型设置为字典。 (参见 NSFetchRequest 和核心数据编程指南)文档了解详情。这将返回一个字典数组,其唯一键是属性名称,其唯一值是一个托管对象的选定属性的值。它比获取完整对象更快并且使用更少的资源。
关于iphone - 关系中的核心数据总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5145738/