Как использовать целочисленное значение как 'key' для установки значения float в NSMutableDictionary?Как использовать целочисленное значение как «ключ» для установки значения в NSMutableDictionary?
ответ
Как NSDictionarys предназначены только для борьбы с объектами, простой способ сделать это, чтобы обернуть целое и поплавок в NSNumber объекта. Например:
NSMutableDictionary *testDictionary = [[NSMutableDictionary alloc] init];
[testDictionary setObject:[NSNumber numberWithFloat:1.23f]
forKey:[NSNumber numberWithInt:1]];
NSLog(@"Test dictionary: %@", testDictionary);
[testDictionary release];
Чтобы извлечь соответствующее значение, просто используйте соответствующий intValue, floatValue и т.д. метод из класса NSNumber.
Это должен быть объект, поэтому вместо этого используйте [NSNumber numberWithInt:myInteger]
.
Затем извлечь его с -integerValue
Метод integerValue возвращает объект NSInteger, а не int. :-) –
Ой, это должно быть -intValue. Спасибо middaparka – sidyll
@middaparka: NSInteger не является объектом. – EmptyStack
Вы можете использовать NSMapTable, так как он поддерживает целые ключи и/или значения напрямую. Нет необходимости вставлять/распаковывать через NSNumber, но его также немного сложнее настроить и использовать.
'NSMapTable' доступен только в iOS 6 и более поздних версиях. –
NSMapTable содержит слабые ссылки, которые могут быть или не быть тем, что вы хотите. Тем не менее это отличается от NSDictionary. –
'NSMapInsert' не доступен на iOS. Есть ли лучший способ установить целочисленное значение, отличное от следующего: '[map setObject: (__ bridge id) ((void *) myInt) forKey: myKey];'? Я предполагаю, что valueOptions были установлены в 'NSPointerFunctionsIntegerPersonality | NSPointerFunctionsOpaqueMemory'. – qix
Спасибо middaparka ... – Ratan
Это говорит мне, что ключ должен быть «NSString *», а поиск через «NSKeyValueCoding.h» выглядит все методы ожидают строки. Что-то изменилось в SDK? –