我正在尝试以NSDictionary
的方式使用NSArrays
,但我甚至无法将其用于字符串。
_times = [[NSDictionary alloc] init];
NSString *test = @"Test";
[_times setValue:@"testing" forKey:test];
NSLog(@"%@",[_times objectForKey:test]);
对于上面的代码,我收到错误消息
为Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<__NSDictionaryI 0x8b86540> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key Test.'
为什么NSString *
无法作为密钥?事实上,这正是该方法所要求的。
答案 0 :(得分:22)
NSDictionary
是不可变的,因此您无法为其设置值
使用NSMutableDictionary
NSMutableDictionary *times = [[NSMutableDictionary alloc] init];
我在这里包括@ Martin的评论
此外:使用setObject:forKey
设置字典值。只有“键值编码”魔法才需要setValue:forKey
。如果应用于不可变字典,setObject:forKey
也会提供更好的error message
。
答案 1 :(得分:1)
此外,对于字典,KVC是一种设置键/值对的低效方法。最好使用NSMutableDictionary方法setObject:forKey: