【问题标题】:My code is throwing Exception Unrecognized selector sent我的代码抛出 Exception Unrecognized selector sent
【发布时间】:2013-01-24 08:25:53
【问题描述】:

这是我用来通过 SBJson 解析获取字符串的代码:

NSMutableArray *abc=[jsonData valueForKey:@"items"];

NSString *imgStr=(NSString *)[abc valueForKey:@"image"];
NSLog(@"%@",imgStr);

这里 abc 是NSMutableArray

它抛出的异常是

> -[__NSArrayI stringByReplacingOccurrencesOfString:withString:]: unrecognized selector sent to instance

【问题讨论】:

  • 请显示您的 JSON。并添加NSLog(@"%@", abc); 行并在崩溃前显示此输出。我怀疑abc 不是你想的那样。
  • 这是我的控制台 2013-01-24 16:14:06.535 Drase[1381:11303] ( { gamepoint = 20; gid = 365; image = "iVBORw0KGgksjallajlasldjlasdjlasjljlajsdlajldal"; level = 1; movie = "<null>"; status = pending; uid = 13; } ) 中 abc 的 NSLog 图像很短,因为它没有出现在评论中

标签: ios nsstring sbjson


【解决方案1】:

在第一行中,您将abc 声明为NSMutableArray

在第二行中,您尝试以NSDictionary 访问它。

在你的情况下(我在这里猜测),我希望你有一个项目数组,每个项目都是一个带有“图像”键的字典。

所以要获得你的第一个项目,你可能会使用

  NSDictionary* firstItem = [abc objectAtIndex:0];

然后您可以从中提取图像:

NSString *imgStr=(NSString *)[firstItem valueForKey:@"image"];1

 NSString *imgStr = [abc objectForKey:@"image"];

1查看@Stig 的评论

【讨论】:

  • 哦!我不知道你能告诉我如何访问 NSMutableArray @HeWas
  • @Atul,查看我的扩展答案
  • 请不要建议使用valueForKey:。这是错误的方法。学习使用objectForKey:,这是OP想要的方法。
  • @StigBrautaset - 已更正,谢谢。我总是会使用 objectForKey - 但我试图让其余代码保持原样,以便 Atul 可以专注于给他带来错误的问题。
  • @HeWas 非常好。我这么说的原因是,如果 OP 使用了正确的方法,他可能一开始就不会感到困惑,因为错误会更加明显。
【解决方案2】:

你的代码有几个问题:

  1. 对于 NSArray,valueForKey: 返回另一个数组。它确实返回一个NSString,不管你的演员。您需要获取对数组中第一个条目的引用,然后调用objectForKey:

  2. 您正在使用 NSKeyValueCoding 方法 valueForKey:,而您可能打算使用 NSDictionary 方法 objectForKey:。对于字典,它们大致可以互换,但如果您使用了objectForKey:,您将得到一个易于理解的错误,即无法在数组上调用objectForKey:仅当您确实需要键值编码语义时才使用valueForKey:

  3. 您几乎从不需要在 Objective-C 中转换 id。您只是以这种方式隐藏错误。 (在这种情况下它可能会或可能不会隐藏您的问题,但它肯定更丑陋,不正确(因为您试图将数组转换为字符串)并且只是愚弄您认为您有一个字符串,因为转换没有失败。)

你可能打算这样写:

NSArray *abc = [jsonData valueForKey:@"items"];
NSDictionary *entry = [abc objectAtIndex:0];    
NSString *imgStr = [entry objectForKey:@"image"];
NSLog(@"%@", imgStr);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    相关资源
    最近更新 更多