NSDictionary setValue:
Solution 1
A) forkey:
should be forKey:
. Capitalization is important.
B) setValue:forKey:
is a KVC method. It may work as you expect here, but the proper method to use for NSMutableDictionary is setObject:forKey:
Solution 2
You want setObject:forKey:
. setValue:forKey:
is part of the key-value coding protocol. NSMutableDictionary
provides setObject:forKey:
.
Quinn Taylor
I'm a Computer Science nerd, longtime Mac addict, and software engineer in Silicon Valley. Happily, I work mostly with Objective-C and a bit in Swift, but I also enjoy Python, use Java when I must, and avoid C++.
Updated on July 14, 2022Comments
-
Quinn Taylor almost 2 years
OK, this is driving me nuts -- please tell me I'm not losing my mind!
I declare:
NSMutableDictionary* generalSettingsDict;
im my .h
I init:
generalSettingsDict = [[NSMutableDictionary alloc] initWithCapacity:5];
in a viewWillAppear
I set:
[generalSettingsDict setValue:[NSNumber numberWithBool:control.on] forkey:[NSNumber numberWithInt:control.tag]];
in a method:
-(void)settingChanged:(UISwitch*)control forEvent:(UIEvent *)event
And I get "NSMutableDictionary may not respond to setValue:forkey:" and the app crashes when it is run.
Please help :(
-
Alex almost 15 yearsYou also have a typo: forKey:, not forkey:. And for the record,
NSMutableDictionary
does supportsetValue:forKey:
, but I still prefer to usesetObject:forKey:
.
-
-
Chuck almost 15 yearsYou'll also find, even after correcting the method name, that KVC keys must be strings. You have to use the native NSMutableDictionary
setObject:forKey:
method to use arbitrary objects as keys.