为什么要终止?

时间:2011-08-26 14:25:21

标签: iphone json

responseData = [[NSMutableData data] retain];
 NSString *requestString = [NSString stringWithFormat:@"http://api.yelp.com/business_review_search?term=&lat=%f&long=%f&radius=10&limit=20&ywsid=XXXXXXXXXX&category=%@",[[ListofLat objectAtIndex:i] floatValue], [[ListofLong objectAtIndex:i] floatValue],appDelegate.categoryField] ; 
//NSURL *url = [[NSURL alloc] initWithString:requestString];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:requestString]];
/*  NSData *tempData =[[NSData alloc] initWithContentsOfURL:url];
    NSString *Str = [[NSString alloc] initWithData:tempData encoding:NSUTF8StringEncoding];
    NSLog(@"%@",Str);*/
NSURLResponse *response = nil;
NSError *error = nil;
//getting the data
NSData *newData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
//json parse
NSString *responseString = [[NSString alloc] initWithData:newData encoding:NSUTF8StringEncoding];
NSDictionary *jsonObject = [responseString JSONValue];
//Accessing JSON content
NSLog(@"message :  %@", [jsonObject objectForKey:@"message"] );
    NSArray *status = [jsonObject objectForKey:@"message"] ;
    NSLog(@"message :  %@", status );
            for(NSDictionary *response in status)
                    {
                        NSString *Resptxt =[response objectForKey:@"text"];
                        txtStatus=[Resptxt copy];
                    }

    if([txtStatus isEqualToString : @"OK"])
    {
        UIAlertView *info = [[UIAlertView alloc] initWithTitle:@"Info" message: @"The request completed without error. " delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [info show];
        [info release];
    }

我使用上面的代码进行json解析。当编译器出现在这一行

  

NSString * Resptxt = [response objectForKey:@“text”];

然后编译器终止并发出此错误

  

* 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [NSCFString objectForKey:]:无法识别的选择器发送到实例0x6166490'

状态包含

  

'message':{'code':0,'text':'OK','version':'1.1.0'}}

这有什么问题?我怎么纠正它?

3 个答案:

答案 0 :(得分:0)

响应变量作为NSString(NSCFString)而不是NSDictionary返回。 NSString没有objectForKey方法,这就是当你调用NSString *Resptxt =[response objectForKey:@"text"];

时应用程序崩溃的原因

答案 1 :(得分:0)

这看起来不像编译器遇到的错误。相反,这是您在运行应用时遇到的错误。

它表示您已将消息objectForKey:发送到字符串实例,即响应是字符串实例。但是,此消息通常会发送到NSDictionary的实例。

我假设JSON响应的结构与您预期的不同。特别是,它比您的代码假设更深入嵌套。

请发布完整的JSON答案,以便我们为您提供更具体的帮助。

答案 2 :(得分:0)

发生的情况是状态中的对象不是字典而是字符串。你得到的错误是当你调用objectForKey时:nscfstring没有响应它。