Ios 我的代码正在引发无法识别的选择器发送的异常
这是我用来通过SBJson解析获取字符串的代码:Ios 我的代码正在引发无法识别的选择器发送的异常,ios,nsstring,sbjson,Ios,Nsstring,Sbjson,这是我用来通过SBJson解析获取字符串的代码: NSMutableArray *abc=[jsonData valueForKey:@"items"]; NSString *imgStr=(NSString *)[abc valueForKey:@"image"]; NSLog(@"%@",imgStr); 这里的abc是NSMutableArray 它抛出的例外是 > -[__NSArrayI stringByReplacingOccurrencesOfString:withStr
NSMutableArray *abc=[jsonData valueForKey:@"items"];
NSString *imgStr=(NSString *)[abc valueForKey:@"image"];
NSLog(@"%@",imgStr);
这里的abc是NSMutableArray
它抛出的例外是
> -[__NSArrayI stringByReplacingOccurrencesOfString:withString:]: unrecognized selector sent to instance
在第一行中,您将
abc
声明为NSMutableArray
在第二行中,您尝试将其作为NSDictionary
访问
在您的情况下(我在这里猜测),我希望您有一个项目数组,每个项目都是一个带有“image”键的字典
因此,为了得到您的第一件物品,您可能会使用
NSDictionary* firstItem = [abc objectAtIndex:0];
然后,您可以从中提取图像:
NSString*imgStr=(NSString*)[firstItem valueForKey:@“image”];一,
1请参见@Stig中的注释,您将
abc
声明为NSMutableArray
在第二行中,您尝试将其作为NSDictionary
访问
在您的情况下(我在这里猜测),我希望您有一个项目数组,每个项目都是一个带有“image”键的字典
因此,为了得到您的第一件物品,您可能会使用
NSDictionary* firstItem = [abc objectAtIndex:0];
然后,您可以从中提取图像:
NSString*imgStr=(NSString*)[firstItem valueForKey:@“image”];一,
1请参阅@Stig的评论,您的代码有几个问题:
valueForKey:
返回另一个数组。它不会返回NSString,无论您的类型如何。您需要获取对数组中第一个条目的引用,然后调用objectForKey:
valueForKey:
,您可能打算使用NSDictionary方法objectForKey:
。对于字典来说,它们基本上是可互换的,但是如果您使用objectForKey:
,您将得到一个很容易理解的错误,即无法在数组上调用objectForKey:
仅当确实需要键值编码语义时才使用valueForKey:
。id
。这样只会隐藏错误。(在本例中,它可能隐藏您的问题,也可能不隐藏您的问题,但它肯定更丑陋、更不正确(因为您试图将数组转换为字符串),并且只是愚弄您,使您以为您拥有一个字符串,因为转换没有失败。)NSArray *abc = [jsonData valueForKey:@"items"];
NSDictionary *entry = [abc objectAtIndex:0];
NSString *imgStr = [entry objectForKey:@"image"];
NSLog(@"%@", imgStr);
您的代码有几个问题:
valueForKey:
返回另一个数组。它不会返回NSString,无论您的类型如何。您需要获取对数组中第一个条目的引用,然后调用objectForKey:
valueForKey:
,您可能打算使用NSDictionary方法objectForKey:
。对于字典来说,它们基本上是可互换的,但是如果您使用objectForKey:
,您将得到一个很容易理解的错误,即无法在数组上调用objectForKey:
仅当确实需要键值编码语义时才使用valueForKey:
。id
。这样只会隐藏错误。(在本例中,它可能隐藏您的问题,也可能不隐藏您的问题,但它肯定更丑陋、更不正确(因为您试图将数组转换为字符串),并且只是愚弄您,使您以为您拥有一个字符串,因为转换没有失败。)NSArray *abc = [jsonData valueForKey:@"items"];
NSDictionary *entry = [abc objectAtIndex:0];
NSString *imgStr = [entry objectForKey:@"image"];
NSLog(@"%@", imgStr);
哦我不知道,你能告诉我如何访问NSMutableArray吗@HeWas@Atul,请参阅我的扩展答案,不要使用
valueForKey:
给出建议。这是错误的方法。学习使用objectForKey:
这是OP想要的方法。@Stigbrautset-更正,谢谢。我总是使用objectForKey——但我试图让代码的其余部分保持原样,以便Atul能够专注于给他带来错误的问题。@HeWas优秀。我这么说的原因是,如果OP使用了正确的方法,他可能一开始就不会感到困惑,因为错误会更加明显。哦!我不知道,你能告诉我如何访问NSMutableArray吗@HeWas@Atul,请参阅我的扩展答案,不要使用valueForKey:
给出建议。这是错误的方法。学习使用objectForKey:
这是OP想要的方法。@Stigbrautset-更正,谢谢。我总是使用objectForKey——但我试图让代码的其余部分保持原样,以便Atul能够专注于给他带来错误的问题。@HeWas优秀。我这么说的原因是,如果OP使用了正确的方法,他一开始可能不会感到困惑,因为错误会更加明显。请显示您的JSON。并添加一个NSLog(@“%@”,abc)代码>行,并显示崩溃前的输出。我怀疑abc不是你想象的那样。这是我的控制台中abc的NSLog2013-01-24 16:14:06.535 Drase[1381:11303]({gamepoint=20;gid=365;image=“ivborw0kggksjallajlajlajlajlajlajlajlajlajlajldal”;level=1;movie=“”;status=pending;uid=13;})
图像很短,因为它没有出现在注释中。请显示您的JSON。并添加一个NSLog(@“%@”,abc)代码>行,并显示崩溃前的输出。我怀疑abc不是你想象的那样。这是我的控制台中abc的NSLog2013-01-24 16:14:06.535 Drase[1381:11303]({gamepoint=20;gid=365;image=“ivborw0kggksjallajlajlajlajlajlajlajlajlajlajldal”;level=1;movie=“”;status=pending;uid=13;})
图像很短,因为它没有出现在注释中