我正在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行代码。
答案 0 :(得分:1)
TL; DR; 您从[{1}}返回NSString
,而不是您期望的NSUserDefaults
。
您的例外:
***由于未捕获的异常'NSUnknownKeyException'终止应用程序,原因:'[< __ NSCFString 0x174676fc0> valueForUndefinedKey:]:此类不是密钥值的密钥值编码。'
表示NSDictionary
是status
的实例,而不是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
中的所有元素都是?这有点令人惊讶。