-2

我有这段代码来获取应用程序版本并将其保存到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

你能帮我找出这个错误吗?

非常感谢 。

4

4 回答 4

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:and objectForKey:

stringWithFormat:另外,除非您确实有要格式化的字符串,否则不要使用。

于 2013-03-24T16:12:33.233 回答
0

我不得不分配字典:

NSMutableDictionary *dic=[[NSMutableDictionary alloc]init];
于 2013-03-24T15:42:28.180 回答
0

您没有alloc+ init-ed 字典dict

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

那是必须的。

于 2013-03-24T15:42:59.293 回答
0

您不创建字典。因为它(可能)是一个局部变量,所以让它未初始化会导致它持有一个未指定的值。在您的情况下,它指向一个不是NSMutableDictionary. 实际上实例化一个,它将起作用:

NSMutableDictionary *dic = [NSMutableDictionary new];
于 2013-03-24T15:44:16.517 回答