我在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
我是否有正确的语法来复制上述循环?还是别的什么?
答案 0 :(得分:2)
这应该有效:
- (NSDecimalNumber *)totalAssetValue
{
return [self valueForKeyPath:@"accounts.@sum.assets.@sum.assetAmount"];
}
“帐户”和“资产”都是很多关系,因此你需要两个“@sum” 运算符(对应于原始代码中的两个嵌套for循环)。
请注意,它没有正式记录(据我所知)键值编码“@sum”
运算符返回NSDecimalNumber
,它可能只是“NSNumber
。