OBJ-C:当key不是字符串时使用valueForKeyPath

时间:2012-01-12 17:32:58

标签: objective-c key-value

我有一个NSArray,它包含NSDictionary对象,其键是NSNumber对象。我想使用valueForKeyPath计算最大值。如果我在以下示例中使用字符串,我将使用valueForKeyPath:@“@ max.OHLCClose”。我如何使用NSNumber对象作为键进行相同的操作?

typedef enum _OHLCField {
   OHLCOpen,
   OHLCClose
} OHLCField;

NSMutableArray *newData = [NSMutableArray array];

newData addObject: [NSDictionary dictionaryWithObjectsAndKeys: 
[NSDecimalNumber numberWithDouble:fOpen], [NSNumber numberWithInt:OHLCOpen], 
[NSDecimalNumber numberWithDouble:fClose], [NSNumber numberWithInt:OHLCClose]];

1 个答案:

答案 0 :(得分:1)

KVC要求键是字符串:

  

键是一个标识对象特定属性的字符串。通常,键对应于接收对象中的访问器方法或实例变量的名称。密钥必须使用ASCII编码,以小写字母开头,并且可能不包含空格。

所以答案很遗憾,你不能用valueForKeyPath:来做到这一点。

如果您需要使用NSNumber作为密钥,则必须自己编写算法代码 - 只需迭代数组并找到与密钥相关的最大值。您可以将算法包装在一个类别中,使其成为NSArray的“部分”。