OBJ-C: использование valueForKeyPath, когда ключ не является строкой - PullRequest
2 голосов
/ 12 января 2012

У меня есть 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 Ответ

1 голос
/ 12 января 2012

KVC требует, чтобы ключи были строками:

Ключ - это строка, идентифицирующая определенное свойство объекта.Как правило, ключ соответствует имени метода доступа или переменной экземпляра в принимающем объекте.Ключи должны использовать кодировку ASCII, начинаться со строчной буквы и не должны содержать пробелов.

Поэтому, к сожалению, вы не можете сделать это с помощью valueForKeyPath:.

Есливам нужно использовать NSNumber как ключи, вам придется самостоятельно кодировать алгоритм - просто переберите массив и найдите максимальное значение, связанное с вашим ключом.Вы можете заключить алгоритм в категорию, чтобы он стал «частью» NSArray.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...