ios - iOS 中来自 JSON 的响应不完整

标签 ios json xcode

我对 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: 委托(delegate)方法在接收到数据 block 时被调用。无法保证您会在第一次通话中收到完整的回复。

正确的做法是在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/

相关文章:

ios - 应用程序审查功能在 iOS 11 中不起作用

ios - 使用错误的 Localized.string

Javascript JSON.parse 字符串 onclick 内联

javascript - 当属性可能不存在时,与数组中的对象属性不同的值

javascript - 如何在保留两个值的同时组合不同数组中的两个对象?

iphone - 我可以将 NSMutableString 链接到 UITextField 吗?

java - 无法从应用程序 : Plist file doesn't exist: 中提取 Info.plist

cocoa - 如何在 Xcode 中编写 GUI 的自动化单元测试?

Xcode 5 : enable/disable entitlements file

ios - 在 iOS XCode 项目中更改产品名称宏