由于未捕获的异常'NSUnknownKeyException导致终止应用程序崩溃

时间:2015-01-25 16:34:32

标签: ios objective-c

我正在NSUserDefaults中保存JSON。当我检索NSArray时,由于未捕获的异常“NSUnknownKeyException”,它正在崩溃以访问我的一个JSON密钥并显示***终止应用程序,原因:'[< __ NSCFString 0x174676fc0> valueForUndefinedKey:]:此类不是密钥值的密钥值编码。'

NSDictionary *status = [[NSUserDefaults standardUserDefaults] objectForKey:@”today”];
        NSArray *ch =  [status valueForKey:@"c"];
        NSArray *service1 =  [status valueForKey:@"s"];
        NSArray *eventList = [status valueForKey:@"l"];
        NSArray *time = [eventList valueForKey:@"s"];
        NSArray *dur = [eventList valueForKey:@"d"];
        NSArray *eveid = [eventList valueForKey:@"e"];
        NSArray *title = [eventList valueForKey:@"t"];

它崩溃了5行代码。

2 个答案:

答案 0 :(得分:1)

TL; DR; 您从[{1}}返回NSString,而不是您期望的NSUserDefaults

您的例外:

  

***由于未捕获的异常'NSUnknownKeyException'终止应用程序,原因:'[< __ NSCFString 0x174676fc0> valueForUndefinedKey:]:此类不是密钥值的密钥值编码。'

表示NSDictionarystatus的实例,而不是NSString。 这一行:

NSDictionary

正在返回NSDictionary *status = [[NSUserDefaults standardUserDefaults] objectForKey:@”today”]; 。当您致电NSString时,接收方不支持该密钥,因此会引发-valueForKey:异常。这里的解决方案是验证您从NSUnknownKeyException获得的内容是您所期望的。

是否会回复NSUserDefaults

它是否支持您使用的密钥?

-valueForKey:吗?

当您打算使用字典时,是否在应用程序的其他位置设置了NSDictionary的{​​{1}}值?

所有这些都值得一试。

答案 1 :(得分:-1)

您不希望将valueForKey:与JSON数据结合使用。相反,请使用objectForKey:,这是NSDictionary方法。

NSDictionary *status = [[NSUserDefaults standardUserDefaults] objectForKey:@"today"];
NSArray *ch =  [status valueForKey:@"c"];
NSArray *service1 =  [status valueForKey:@"s"];

此外,我建议你使用现代和更短的语法:

NSDictionary *status = [[NSUserDefaults standardUserDefaults] objectForKey:@"today"];
NSArray *ch =  status[@"c"];
NSArray *service1 =  status[@"s"];

BTW。:类型数组status中的所有元素都是?这有点令人惊讶。