OFRBG
OFRBG

Reputation: 1778

Use NSPredicate to add up all values

I have a program which uses Core Data. I was kinda cheating when adding the numeric values from each entity in a loop. I read about using NSPredicate to filter the data, but I don't know how to manipulate the data or how the results are even stored. Thanks.

Upvotes: 1

Views: 2032

Answers (2)

Mark S.
Mark S.

Reputation: 4017

You can use NSExpressionDescription to have Core Data do the summing. I used this article as a tutorial when I was doing something similar.

Upvotes: 1

Monolo
Monolo

Reputation: 18253

You can do it in two steps, if that fits your requirements.

  1. First filter your data with your NSPredicate and keep it all in an NSArray.
  2. Then use a compound operator with Key-Value Coding to get the sum.

Below is an example of how it can be done. To make it self-contained, a hard-coded array is used instead of Core Data:

// In reality this array would be the result of a Core Data query:
NSArray *numbers = @[@{@"number":@3},
                     @{@"number":@2}];

NSNumber *sum = [numbers valueForKeyPath:@"@sum.number"];

The trick here is the @sum compound operator. You can read about it (and another couple of similar operators) here.

Upvotes: 13

Related Questions