0

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

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

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

这里是 abcNSMutableArray

它抛出的异常是

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

2 回答 2

4

在第一行中,您声明abcNSMutableArray

在第二行中,您尝试将其作为NSDictionary.

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

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

  NSDictionary* firstItem = [abc objectAtIndex:0];

然后你可以从中提取你的图像:

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

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

1见@Stig 的评论

于 2013-01-24T08:42:04.643 回答
0

您的代码有几个问题:

  1. 对于 NSArray,valueForKey:返回另一个数组。无论您的演员如何,它都不会返回 NSString。您需要获取对数组中第一个条目的引用,然后调用objectForKey:它。

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

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

你可能打算写这样的东西:

NSArray *abc = [jsonData valueForKey:@"items"];
NSDictionary *entry = [abc objectAtIndex:0];    
NSString *imgStr = [entry objectForKey:@"image"];
NSLog(@"%@", imgStr);
于 2013-01-24T11:26:02.680 回答