0

I have NSManagedObject with a 'one-to-many' relationship to a set of items. I love how I can use KVC keyPaths to easily get quantity below as a sum across all my items.

- (NSNumber *)quantity
{
    return [self valueForKeyPath:@"items.@sum.quantity"];
}

Now I want to know if it's possible to do the something similar here for value. Something like @"items.@sum.(quantity * value)" ?

- (NSNumber *)value
{
    double value = 0;
    for (Item *item in self.items)
    {
        value += [[item quantity] doubleValue] * [[item value] doubleValue];
    }
    return [NSNumber numberWithDouble:value];
}
trapper
  • 11,716
  • 7
  • 38
  • 82

2 Answers2

1

I figured out how to do this.

Just add a new property to the Item class and override the getter

@property (nonatomic, readonly) NSNumber *totalValue;

...

- (NSNumber *)totalValue
{
    return [NSNumber numberWithDouble:[self.value doubleValue] * [self.quantity doubleValue]];
}

Now you can use @"items.@sum.totalValue as a keyPath

trapper
  • 11,716
  • 7
  • 38
  • 82
-2

No. Sometimes you just gotta write code.

Lily Ballard
  • 182,031
  • 33
  • 381
  • 347