【问题标题】:OBJ-C: using valueForKeyPath when key is not a stringOBJ-C:当键不是字符串时使用 valueForKeyPath
【发布时间】:2012-01-12 17:32:57
【问题描述】:

我有一个 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]];

【问题讨论】:

    标签: objective-c key-value


    【解决方案1】:

    KVC 要求键是字符串:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-15
      • 2011-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多