如何在后台继续使用NSURLConnection开始连接?

我一直在寻找几个星期,试图find答案,或者如何做到这一点的一个例子。

NSURLConnection的所有示例/教程显示它在前台开始或从后台开始,与beginBackgrounTaskWithExpirationHandler的所有示例一样:显示如何在进入后台后启动后台任务。

据我所知,在互联网或书籍上没有任何东西显示如何在前景中开始连接,如果没有完成,则在后台继续。

这个问题的答案实际上并没有回答这个问题:

应该如何处理已经在进行中的NSUrlConnection?

如果你阅读了引用的“超越基础”部分,它说:“当应用程序在前台时,后台任务不会有任何影响”。 这意味着如果你想在前台下载,在前台使用NSURLConnection来启动后台任务是不可能的。

您只需调用beginBackgroundTaskWithExpirationHandler:当您开始下载过程时您的应用程序正处于前台右侧。 请注意,您必须将返回值存储在ivar / property中:

 @property (nonatomic, assign) UIBackgroundTaskIdentifier backgroundTaskID; @synthesize backgroundTaskID; ... NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self]; self.backgroundTaskID = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ // Cancel the connection [connection cancel]; }]; 

这将允许您的应用程序继续运行,如果它发送到后台,而下载正在运行。 然后,在表示完成下载的委托方法中,您必须将匹配的endBackgroundTask: ::

 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { // Handle the error ... [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTaskID]; } - (void)connectionDidFinishLoading:(NSURLConnection *)connection { // Save the downloaded data ... [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTaskID]; }