这是我用来获取字符串来通过SBJson解析的代码:
NSMutableArray *abc=[jsonData valueForKey:@"items"];
NSString *imgStr=(NSString *)[abc valueForKey:@"image"];
NSLog(@"%@",imgStr);
这里abc是NSMutableArray
它抛出的异常是
> -[__NSArrayI stringByReplacingOccurrencesOfString:withString:]: unrecognized selector sent to instance
答案 0 :(得分:4)
在第一行中,您将abc
声明为NSMutableArray
在第二行中,您尝试将其作为NSDictionary
进行访问。
在你的情况下(我猜这里),我希望你有一个项目数组,每个项目都是一个带有“图像”键的字典。
所以要获得你可以使用的第一个项目
NSDictionary* firstItem = [abc objectAtIndex:0];
然后你可以从中提取你的图像:
NSString * imgStr =(NSString *)[firstItem valueForKey:@“image”]; 1
NSString *imgStr = [abc objectForKey:@"image"];
1 见@Stig的评论
答案 1 :(得分:0)
您的代码有几个问题:
对于NSArray,valueForKey:
返回另一个数组。无论你的演员表是什么,不都会返回NSString。您需要获取对数组中第一个条目的引用,然后在其上调用objectForKey:
。
您正在使用NSKeyValueCoding方法valueForKey:
,您可能打算使用NSDictionary方法objectForKey:
。对于词典,它们大致可以互换,但是如果你使用objectForKey:
,你就会有一个容易理解的错误,即无法在数组上调用objectForKey:
。 仅在您真正需要键值编码语义时才使用valueForKey:
。
您几乎从不需要在Objective-C中投射id
。你只是以这种方式隐藏错误。 (它可能会或可能不会隐藏你的问题在这个例子中,但它肯定是丑陋的,不正确的(因为你试图将数组转换为字符串)并且只是愚弄你以为你有一个字符串,因为演员没有失败。)
你可能想写这样的东西:
NSArray *abc = [jsonData valueForKey:@"items"];
NSDictionary *entry = [abc objectAtIndex:0];
NSString *imgStr = [entry objectForKey:@"image"];
NSLog(@"%@", imgStr);