0

我收到以下形式的服务器响应:

results are:{
    AverageMark = 40;
    "Grade A" = 10;
    "Grade B" = 20;
    "Grade C" = 30;
    "Grade D" = 20;
    MaxMark = 99;
    MinMark = 44;
    ProfileGrade = "";
    ProfileMark = 1;
}

但是我无法将响应数据保存到数组中。这是我在didReceiveResponse中的代码:

    {    
        NSString *jsonString = [[NSString alloc] initWithString:responseData];
        NSArray *jsonResults = [jsonString JSONValue];
        NSLog(@"results are:%@",jsonResults); //this log is shown above
        for (int i=0; i<[jsonResults count]; i++)
        {
            NSDictionary *AllData=(NSDictionary *)[jsonResults objectAtIndex:i]; //Program is crashing here--//
            NSMutableArray  *DataArray=[[NSMutableArray alloc]init];
            NSString *avgMarkString;
            avgMarkString=(NSString *)[AllData objectForKey:@"MaxMark"];
            [DataArray addObject:avgMarkString];
        }
    }

我想将响应数据保存到名为“DataArray”的数组中。但是程序崩溃了。我究竟做错了什么?

4

3 回答 3

1

那不是 json,试着看看这个http://json.org/example.html

于 2012-08-28T09:37:51.070 回答
1

鉴于 JSON 响应无效。在此处验证您的 JSON 响应。

于 2012-08-28T09:48:06.930 回答
1

您可能还没有完整的数据-connection:didReceiveResponse:。如果您获得有效的 statusCode(在 200-299 之间应该可以) ,则创建该类型的实例变量或属性NSMutableData并初始化数据 ivar 或属性。在委托方法中的数据对象上
-connection:didReceiveResponse:使用。最后在 数据完成后可以解析成JSON。appendData:-connection:didReceiveData:-connectionDidFinishLoading:

或者,您可以只使用AFNetworking库。该库提供了一些方便的方法来处理 XML、JSON、图像等......

阅读以下页面以了解 AFNetworking 的功能:http: //engineering.gowalla.com/2011/10/24/afnetworking/


我自己的一个项目中的一些示例代码,用于使用 NSURLConnectionDelegate 方法使用队列进行下载。URL Request 对象是一些块“回调”的 NSURLConnection 的自定义子类:

#pragma mark - URL connection delegate

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;

    NSRange range = NSMakeRange(200, 99);
    if (NSLocationInRange(httpResponse.statusCode, range));
    {
        self.data = [[NSMutableData alloc] init];
    }
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [_data appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    // inform caller that download is complete, provide data ...

    if (_request.completionHandler)
    {
        _request.completionHandler(_data, nil);
    }

    [self removeRequest:_request];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    DLog(@"%@", error);

    // inform caller that download failed, provide error ...

    if (_request.completionHandler)
    {
        _request.completionHandler(nil, error);
    }

    [self removeRequest:_request];
}
于 2012-08-28T10:06:37.720 回答