在iOS8中使用NSUrlSession通过流请求进行后台上载
在前面的iOS7中,当我们尝试在后台使用流请求上载时,会出现以下异常 由于未捕获的异常“NSGenericeException”而终止应用程序,原因:“后台会话中的上载任务必须来自文件” 但在iOS8中,当我们尝试在后台使用流进行上传时,也不例外 现在我的问题是 1) iOS8中是否允许使用uploadTaskWithStreamedRequest:上传Backgord 2) 在iOS8中,我将后台NSURLConfiguration与uploadTaskWithStreamedRequest一起使用。我正在使用-(void)URLSession:(NSURLSession*)会话任务:(NSURLSessionTask*)任务需要新的数据流:(void(^)(NSInputStream*)completionHandler向NSURLSession提供流。当应用程序在前台时,它工作正常,并将我的文件上传到服务器。但一旦应用程序在后台启动,流就结束,NSURLSession完成,并出现以下错误 Error Domain=nsurerrordomain Code=-997“与后台传输服务的连接中断” 我想当应用程序进入后台时,我的流就结束了。现在我的问题是,我应该在哪个runloop中安排我的流,或者让我知道我的理解是否有任何错误在iOS8中使用NSUrlSession通过流请求进行后台上载,ios,ios8,nsurlsession,nsinputstream,nsurlsessionuploadtask,Ios,Ios8,Nsurlsession,Nsinputstream,Nsurlsessionuploadtask,在前面的iOS7中,当我们尝试在后台使用流请求上载时,会出现以下异常 由于未捕获的异常“NSGenericeException”而终止应用程序,原因:“后台会话中的上载任务必须来自文件” 但在iOS8中,当我们尝试在后台使用流进行上传时,也不例外 现在我的问题是 1) iOS8中是否允许使用uploadTaskWithStreamedRequest:上传Backgord 2) 在iOS8中,我将后台NSURLConfiguration与uploadTaskWithStreamedRequest一
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task needNewBodyStream:(void (^)(NSInputStream *))completionHandler
{
// Open producer/consumer streams. We open the producerStream straight
// away. We leave the consumerStream alone; NSURLConnection will deal
// with it.
NSLog(@"%@", [NSThread currentThread]);
NSInputStream *consStream;
NSOutputStream *prodStream;
[NSStream createBoundInputStream:&consStream outputStream:&prodStream bufferSize:SFAMaxBufferLength];
assert(consStream != nil);
assert(prodStream != nil);
self.consumerStream = consStream;
self.producerStream = prodStream;
self.producerStream.delegate = self;
[self.producerStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[self.producerStream open];
// Set up our state to send the body prefix first.
self.buffer = [self.bodyPrefixData bytes];
self.bufferLimit = [self.bodyPrefixData length];
completionHandler(self.consumerStream);
}
无法使用后台配置上载流式任务。我仅在两种情况下成功上传数据:
你可以在后台上传一个多部分文件——只是这不是直接的。请参阅:如果您可以共享任何文档链接,指出backgroundTask只支持从文件上传,而不支持从正文或NSStream上传,那就太好了。不幸的是,他们没有记录很多关于后台传输的内容。我所知道的一切都是因为我们做了大量的研究。请注意,我们不鼓励这样做,因此答案应该是寻找解决方案的终点(而不是参考文献的另一个中途停留,随着时间的推移,这些参考文献往往会变得陈旧)。请考虑在这里添加一个独立的概要,将链接作为参考。