在NSManagedObject子类上使用KVC Collection Operators

时间:2014-02-17 15:06:34

标签: objective-c cocoa key-value-coding

我在NSManagedObject的子类中有一个方法,它返回所有资产的总和。目前它看起来像这样,工作正常

- (NSDecimalNumber *)totalAssetValue
{
    NSDecimalNumber *total = [NSDecimalNumber zero];
    for (NSManagedObject *account in [self valueForKey:@"accounts"]) {
        for (NSManagedObject *asset in [account valueForKey:@"assets"]) {
            total = [total decimalNumberByAdding:[asset valueForKey:@"assetAmount"]];
        }
    }
    return total;
}

我想使用KVC集合运算符来消除循环,所以我尝试了这个

- (NSDecimalNumber *)totalAssetValue
}
    return [self valueForKeyPath:@"accounts.assets.@sum.assetAmount"];
}

但是,我收到以下错误

  

- [__ NSSetI decimalValue]:无法识别的选择器发送到实例0x60000000dc70

我是否有正确的语法来复制上述循环?还是别的什么?

1 个答案:

答案 0 :(得分:2)

这应该有效:

- (NSDecimalNumber *)totalAssetValue
{
    return [self valueForKeyPath:@"accounts.@sum.assets.@sum.assetAmount"];
}

“帐户”和“资产”都是很多关系,因此你需要两个“@sum” 运算符(对应于原始代码中的两个嵌套for循环)。

请注意,它没有正式记录(据我所知)键值编码“@sum” 运算符返回NSDecimalNumber,它可能只是“NSNumber