2013-01-24 34 views
0

这是我使用得到的字符串通过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

显示您的JSON请。并添加一个'NSLog(@“%@”,abc);'line并在崩溃前显示它的输出。我怀疑'abc'不是你认为的那样。 –

+0

这是我的CONSOL'中的abc的NSLog' 2013-01-24 16:14:06。535 Drase [1381:11303]( { gamepoint = 20; GID = 365; 图像= “iVBORw0KGgksjallajlasldjlasdjlasjljlajsdlajldal”; 级别= 1; 电影= “”; 状态=未决; UID = 13; } )'图像很短,因为它不是在评论 – Atul

回答

4

在第一行声明abc是一个NSMutableArray

在第二行中,您尝试以NSDictionary的身份访问它。在你的情况(我在这里猜测),我希望你有一个项目的数组,并且每个项目是一个带有“图像”键的字典。

所以让你的第一个项目,你可以使用

NSDictionary* firstItem = [abc objectAtIndex:0]; 

然后你可以从该提取图像:

的NSString * imgStr =(的NSString *)与firstItem valueForKey:@ “形象” ]。

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

见注释从@Stig

+0

哦!我不知道你可以告诉我如何访问NSMutableArray @HeWas – Atul

+0

@Atul,请参阅我的扩展答案 – foundry

+1

请不要使用'valueForKey:'建议。这是错误的方法。学习使用'objectForKey:'这是OP想要的方法。 –

0

你的代码中有几个问题:

  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); 
相关问题