我对Json在iOs中收到的响应有疑问。
我不知道是否是因为有很多有关WebService的信息,但是Json的响应不是很好。我收到一个答案,但是当我使用变量NSMutableData * d检查数据的字符串时,它并不完整,并且在* response中,它无法使用JSONObjectWithData进行初始化。
NSLog(@"Request: %@", bytes);
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];
NSData *requestData = [NSData dataWithBytes:[bytes UTF8String] length:[bytes length]];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody: requestData];
[NSURLConnection connectionWithRequest:request delegate:self];
答案是:
- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
NSMutableData *d = [NSMutableData data];
[d appendData:data];
NSString *a = [[NSString alloc] initWithData:d encoding:NSASCIIStringEncoding];
NSError *error;
NSDictionary *response = [NSJSONSerialization JSONObjectWithData:d options:kNilOptions error:&error];
}
最佳答案
每当接收到大量数据时,就会调用connection:didReceiveData:
委托方法。无法保证您会在第一个电话中收到完整的回复。
正确的方法是收集connection:didReceiveData:
中的数据,然后在connectionDidFinishLoading:
中进行处理
您的代码应如下所示:
...
self.receivedData = [NSMutableData data];
...
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[self.receivedData appendData:data]
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSError *error;
NSDictionary *response = [NSJSONSerialization JSONObjectWithData:self.receivedData options:kNilOptions error:&error];
}
关于ios - iOS中来自JSON的响应不完整,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33919085/