NSDictionary setValue:

33,985

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:.

Share:
33,985
Quinn Taylor
Author by

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, 2022

Comments

  • Quinn Taylor
    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
      Alex almost 15 years
      You also have a typo: forKey:, not forkey:. And for the record, NSMutableDictionary does support setValue:forKey:, but I still prefer to use setObject:forKey:.
  • Chuck
    Chuck almost 15 years
    You'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.