我有这个代码来获取应用版本并将其保存到nsdictionary
:
NSString *Version=[NSString stringWithFormat:@"%@",[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]];
NSLog(@"VERSION%@",Version); //prints the right thing
NSMutableDictionary *dic;
[dic setValue:Version forKey:@"version"]; //crash
[dic setValue:Errors forKey:@"errors"]; //work
我遇到的崩溃错误是:
setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key version
你能帮我识别这个错误吗?
非常感谢。
答案 0 :(得分:0)
我不得不分配字典:
NSMutableDictionary *dic=[[NSMutableDictionary alloc]init];
答案 1 :(得分:0)
您没有alloc
+ init
- 编辑字典dict
。
NSMutableDictionary *dic=[[NSMutableDictionary alloc] init];
这是必须的。
答案 2 :(得分:0)
您不创建字典。由于它(可能)是一个局部变量,因此保持未初始化会导致其保持未指定的值。在您的情况下,它指向的对象不是NSMutableDictionary
。实际上实例化一个,它将工作:
NSMutableDictionary *dic = [NSMutableDictionary new];
答案 3 :(得分:0)
您需要致电setObject:forKey:
,而不是setValue:forKey:
。
NSString *Version=[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
NSLog(@"VERSION = %@", Version); //prints the right thing
NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
[dic setObject:Version forKey:@"version"]; //crash
[dic setObject:Errors forKey:@"errors"]; //work
当您真正想要使用键值编码时,仅使用setValue:forKey:
和valueForKey:
。否则,请使用正确的setObject:forKey:
和objectForKey:
。
另外,请不要使用stringWithFormat:
,除非您确实有要格式化的字符串。