- [__ NSCFString objectAtIndex:]:无法识别的选择器发送到实例0x6891460

时间:2012-10-25 07:41:05

标签: iphone objective-c ipad

请解决我的问题它给我错误 - [__ NSCFString objectAtIndex:]:无法识别的选择器发送到实例0x6891460

NSString *urlString = @"http://192.168.1.190:8080/mwharf/retrive.action?action=consigneeName&startConsgn=";
NSString *url = [urlString stringByAppendingString:txtConsignee.text];

NSData *webData=[NSMutableData dataWithContentsOfURL:[NSURL URLWithString:url]];    

NSArray *jsonDict=[NSJSONSerialization JSONObjectWithData:webData options:kNilOptions error:&error];

NSMutableArray *tempArray;
NSMutableArray *consigneeArray=[[NSMutableArray alloc]init];
NSInteger arrayCount=0;
for (int i=0; i<[jsonDict count]; i++) {              
    consigneeArray =[jsonDict objectAtIndex:i]; 
    NSLog(@"consigneeArray :%@",consigneeArray);
    tempArray=[[NSMutableArray alloc]initWithArray:[consigneeArray objectAtIndex:arrayCount]]; 
    [consigneeArray insertObject:tempArray atIndex:arrayCount];
    arrayCount++; 
} 

NSArray *passArray=[NSArray arrayWithObject:consigneeArray];
NSLog(@"passArray :%@",passArray);

2 个答案:

答案 0 :(得分:0)

[NSJSONSerialization JSONObjectWithData:]返回NSDictionary而不是NSArray。因为NSDictionary没有这样的方法objectAtIndex你有一个错误。试试这个:

NSDictionary *jsonDict=[NSJSONSerialization JSONObjectWithData:webData options:kNilOptions error:&error];

NSMutableArray *tempArray;
NSMutableArray *consigneeArray=[[NSMutableArray alloc]init];
NSInteger arrayCount=0;
for(NSString* key in jsonDict) {


    consigneeArray =[jsonDict valueForKey: key]; 
    NSLog(@"consigneeArray :%@",consigneeArray);
    tempArray=[[NSMutableArray alloc]initWithArray:[consigneeArray objectAtIndex:arrayCount]]; 
    [consigneeArray insertObject:tempArray atIndex:arrayCount];
    arrayCount++; 
} 

但是返回类型也可以是NSArray或NSString,它取决于您的JSON结构。所以最好的方法是使用

检查返回类型
 [returnObj isKindOfClass:[NSDictionary class]]

 [returnObj isKindOfClass:[NSArray class]]

分别解析每个返回类型

答案 1 :(得分:0)

出现此错误的原因是您尝试使用NSString的对象浏览特定索引处的对象。而objectAtIndex仅支持NSArray或NSMutableArray。