Search code examples
iphonecore-datanspredicate

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.


Solution

  • 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.