【问题标题】:JSON parsing unrecognized selector sent to instance 0x8f3ab10JSON 解析无法识别的选择器发送到实例 0x8f3ab10
【发布时间】:2014-04-30 18:08:32
【问题描述】:

我正在尝试解析一些非常基本的 json 数据,我在做完全相同的乳清,但我得到了以下错误:

-[__NSCFDictionary objectAtIndex:]:无法识别的选择器发送到实例 0x8e7d570 2014-04-30 15:04:33.699 Mensagens 2[7530:60b] * 由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'-[__NSCFDictionary objectAtIndex:]: 无法识别的选择器发送到实例 0x8e7d570'

这是 GET.JSON 文件:

{
  "version":"6"
}

这是我的应用程序中我尝试获取版本值的代码:

NSURL *url = [NSURL URLWithString:@"http://localhost/app/get.json"];

NSData *data = [NSData dataWithContentsOfURL:url];

NSMutableArray *getVersion = [[NSMutableArray alloc]init];
getVersion = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

NSString *currentVersion = [[getVersion objectAtIndex:0]objectForKey:@"version"];

NSLog(@"Version = %@", currentVersion);

我只是看不出哪里出了问题。

【问题讨论】:

标签: ios objective-c json unrecognized-selector


【解决方案1】:

应该是

NSDictionary *getVersion = [NSJSONSerialization JSONObjectWithData:data 
                                                        options:kNilOptions error:nil];
NSString *currentVersion = [getVersion objectForKey:@"version"];

或使用新语法

NSString *currentVersion = getVersion[@"version"];

因为objectAtIndex 表示您正在访问一个数组,但您只有一个 json 对象

【讨论】:

  • JSON 对象可以是一个数组,在这种情况下它看起来不是。
  • @Stonz2 数组在哪里? { "version":"6" }
  • 我知道在提问者的例子中它不是一个数组,我只是指出一个JSON对象可以是一个数组。
  • 感谢您的准确回答,我会尽快接受您的回答。
  • @Stonz2 a JSON object CAN be an array 我不明白?我的理解是object -> NSDictionaryarray->NSArray
【解决方案2】:

无论您用于声明 getVersion 的类型如何,以下方法都会根据传递给此方法的数据创建 NSDictionary 或 NSArray。在您的情况下,JSON 响应数据似乎是一个字典,因此即使 getVersion 被声明(或就此而言甚至被实例化)为 NSMutableArray 对象,在执行以下 getVersion 之后也是一个 NSDictionary。

getVersion = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

正如 meda 所回答的,您可以使用 [getVersion objectForKey:@"Version"] 来获取您要查找的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-28
    • 2012-07-24
    相关资源
    最近更新 更多