How can I use an integer value as 'key' to set a float value in NSMutableDictionary ?
How can I use an integer value as 'key' to set value in NSMutableDictionary?
Asked Answered
As NSDictionarys are only designed to deal with objects, a simple way to do this is to wrap the integer and float in a NSNumber object. For example:
NSMutableDictionary *testDictionary = [[NSMutableDictionary alloc] init];
[testDictionary setObject:[NSNumber numberWithFloat:1.23f]
forKey:[NSNumber numberWithInt:1]];
NSLog(@"Test dictionary: %@", testDictionary);
[testDictionary release];
To extract the relevant value, simply use the appropriate intValue, floatValue, etc. method from the NSNumber class.
It's telling me that the key must be
NSString*
, and searching through NSKeyValueCoding.h
it looks like all the methods expect strings. Has something changed in the SDK? –
Wooton You can use NSMapTable as it supports integer keys and/or values directly. No need to box/unbox through NSNumber, but it is also slightly more difficult to set up and use.
NSMapTable
is only available in iOS 6 and later. –
Rapier NSMapTable holds weak references, which may or may not be what you want. That is different than NSDictionary, though. –
Well
NSMapInsert
isn't available on iOS. Is there a better way to set an integer value other than something like this: [map setObject:(__bridge id)((void *)myInt) forKey:myKey];
? I'm assuming the valueOptions were set to NSPointerFunctionsIntegerPersonality | NSPointerFunctionsOpaqueMemory
. –
Orphrey It needs to be an object, so use [NSNumber numberWithInt:myInteger]
instead.
Then, retrieve it with -integerValue
The integerValue method returns an NSInteger object, not an int. :-) –
Selle
Ouch, that should be -intValue. Thanks middaparka –
Alkmaar
@middaparka: NSInteger is not an object. –
Rhona
@Simon yes haha, but anyway I decided to point -intValue because I think the OP needs the primitive. –
Alkmaar
@Simon Ah.. yes. It's a foundation data type. My bad. (Feel free to ignore the above.) :-) –
Selle
© 2022 - 2024 — McMap. All rights reserved.
Expected method to write array element not found on object of type 'NSMutableDictionary *
on an attempt to use a rawint
or anNSInteger
as an NSMutableDictionary key. – Forras