在创建用于获取json的url之前,用户必须先输入一些数据。如果输入数据错误,则将无法正确获取JSON。
但是我不知道如何处理使用错误的url调用JSON的异常。
这是我的代码:
NSError *error;
NSMutableDictionary* json = [NSJSONSerialization
JSONObjectWithData:url
options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves
error:&error];
if (error){
NSLog(@"%@",[error localizedDescription]);
}
else{
@try {
if (json){
[Constants shared].salt = json[@"salt"];
代码的最后一行是发生异常的地方,因为用户输入了错误的输入。所以很明显,不会有一个正确的json响应fetchet,也就不会有“盐”对象。我得到的错误是:
-[__NSArrayM objectForKeyedSubscript:]: unrecognized selector sent to instance 0x146aa310
我尝试将json提取放入@try @catch中,但没有成功。
有什么建议 ?
编辑:
当用户键入正确的代码时,这是我得到的json响应:
{
user_id: "22066",
salt: "ce8c0f9e3e1add06bebc1acded7b692b68efddb87bfdc5bb1fb516f6a3e24425"
}
这是我得到的,当代码无效时:
[ ] (empty array)
问题不在于字典没有键的对象@"salt"
,而是json
首先不是字典。仔细查看错误消息,您将看到它是一个数组。问题不是关键,而是数组不响应的事实-objectForKeyedSubscript:
。
因此,当您从取回对象时-JSONObjectWithData:...
,请nil
在尝试访问其内容之前,先检查它是否不是字典,实际上是否是字典。您可以像这样检查它:
if ([json isKindOfClass:[NSDictionary class]]) {
// put the code that accesses `json` here
}
这条件将是false
,如果json
是nil
或不是字典以外的东西。else
如果您依赖获取数据,则可以添加一个子句以采取任何必要的步骤进行恢复。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句