NSDictionary不是关键测试的关键值编码兼容

时间:2014-02-24 17:22:15

标签: ios objective-c nsstring nsdictionary

我正在尝试以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 *无法作为密钥?事实上,这正是该方法所要求的。

2 个答案:

答案 0 :(得分:22)

NSDictionary是不可变的,因此您无法为其设置值 使用NSMutableDictionary

NSMutableDictionary *times = [[NSMutableDictionary alloc] init];

我在这里包括@ Martin的评论

此外:使用setObject:forKey设置字典值。只有“键值编码”魔法才需要setValue:forKey。如果应用于不可变字典,setObject:forKey也会提供更好的error message

答案 1 :(得分:1)

此外,对于字典,KVC是一种设置键/值对的低效方法。最好使用NSMutableDictionary方法setObject:forKey: