【问题标题】:NSJSONSerialization parse error - unrecognized selectorNSJSONSerialization 解析错误 - 无法识别的选择器
【发布时间】:2014-04-22 05:55:24
【问题描述】:

这是代码:

NSString *jsonString = @"[
            {\"sn\": \"E\", \"t\": \"K\", \"d\": \"Tue 3-Mar\"}, 
            {\"sn\": \"F\", \"t\": \"Y 1\", \"d\": \"Tue 3-Mar\"}
         ]";
NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSArray *jsArray = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSLog(@"jsArray: %@", jsArray);

for (id job in jsArray) {
    NSLog(@"job: %@", job);
    NSLog(@"%@", [job sn]);
}

在控制台中,我得到了这个:

2014-04-22 15:40:46.464 test[2442:60b] jsArray: (
        {
        d = "Tue 3-Mar";
        sn = E;
        t = K;
    },
        {
        d = "Tue 3-Mar";
        sn = F;
        t = "Y 1";
    }
)
2014-04-22 15:40:46.466 test[2442:60b] job: {
    d = "Tue 3-Mar";
    sn = E;
    t = K;
}
-[__NSCFDictionary sn]: unrecognized selector sent to instance 0x8fa53b0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '-[__NSCFDictionary sn]: unrecognized selector sent to instance 0x8fa53b0'

它似乎可以识别对象数组和单个对象。为什么反对sn这个属性?

【问题讨论】:

  • 使用[job valueforKey:@"sn"] 或job[@"sn"] 代替[job sn]
  • 正如 rmaddy 指出的那样,sn 不是一种方法;相反,它是一把钥匙。此外,如果您知道在数组项迭代期间使用的是什么对象,请声明该对象,而不是 id。它将在未来有所帮助。
  • Why does it object to the property sn 因为sn 不是属性。
  • 谢谢大家。 @Chris - 我是一个改革 JavaScript 的人,在 JS 中你可以称之为 property :) 我应该使用 key 这个词,对吧?
  • @Nick,我明白了。这有点令人困惑,因为属性也是 Objective-C 中的一个关键字。很高兴你解决了。

标签: ios cocoa-touch nsjsonserialization unrecognized-selector


【解决方案1】:

jsArray 包含字典。所以jobNSDictionaryNSDictionary 没有名为 sn 的方法。如果您想要键 @"sn" 的值,那么您需要:

for (NSDictionary *job in jsArray) {
    NSLog(@"job: %@", job);
    NSLog(@"%@", job[@"sn"]);
}

【讨论】:

    【解决方案2】:

    您的 jsArray 包含 NSDictionaries,因此作业类型将为 NSDictionary。 你不能像这样从NSDictionary 检索值。

    用途:

     NSLog(@"%@", [job objectForKey:@"sn"]);
    

    【讨论】:

      猜你喜欢
      • 2012-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多