我想使用NSURLSession从服务器接收 xml 流并立即在屏幕上显示每个 xml。
这是我的委托代码:
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
// Enumerate each message-body.
[data enumerateByteRangesUsingBlock:^(const void * _Nonnull bytes, NSRange byteRange, BOOL * _Nonnull stop) {
// Convert message-body to xml string.
NSString *string = [[NSString alloc] initWithBytes:bytes
length:byteRange.length
encoding:NSUTF8StringEncoding];
dispatch_async(dispatch_get_main_queue(), ^{
// Some code to display string.
// ...
});
}];
}
这段代码工作正常,除了一个问题。问题是,有时在接收流时,didReceiveData不会在didReceiveResponse之后立即被调用,它有时会接收多个 HTTP 消息,然后调用didReceiveData一次以传递它刚刚为我接收的所有消息。
有时接收多条消息可能需要一段时间,并且使我的应用程序无法实时显示 xml。
是否有任何配置或属性可以使其立即调用didReceiveData?我阅读了文档,但没有发现任何有用的信息。
谢谢一堆。
更新:
我尝试使用NSURLConnection来做同样的事情,它运行完美,没有这个问题。每个didReceiveData都会在didReceiveResponse后面立即调用。
如何使NSURLSession的didReceiveData像NSURLConnection一样工作?