锁屏中断NSURLConnection

时间:2012-11-06 19:56:30

标签: objective-c ios nsurlconnection nsurlrequest

我想知道当用户锁定和解锁iPad屏幕时幕后发生的事情。我有一个使用NSURLConnection下载文件的应用程序,并且下载失败并出现SOAP错误(“无法找到指定主机名的服务器”),但是当用户锁定屏幕时却解锁了它。 无论错误弹出的事实如何,下载永远不会完成。任何想法为什么以及可以做些什么呢?

NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:300];

NSURLConnection* conn = [[NSURLConnection alloc] initWithRequest: request delegate: self];

据我所知,当我点击主页按钮时,我得到:

applicationWillResignActive
applicationDidEnterBackground

三小时后我回忆起应用程序后,我得到了:

applicationWillEnterForeground

,即使在后台,下载已经完成或已经取得进展。

当我将它留在后台更长时间(5分钟)时,它会因错误而超时。

当我锁定屏幕时,我得到相同的应用程序状态顺序,但也有关于下载断开连接的错误消息。

谢谢!

1 个答案:

答案 0 :(得分:6)

我的猜测是你的连接断开了,因为当应用程序进入后台时它正在运行,而你没有正确的实现来保持它的运行。也许你应该看一下Apple的Background Execution and Multitasking文档。它将向您展示如何让您的应用程序在后台运行大约10分钟而不会被终止。查找以下示例代码并了解它如何解决您的问题:

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
        // Clean up any unfinished task business by marking where you.
        // stopped or ending the task outright.
        [application endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    }];

    // Start the long-running task and return immediately.
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        // Do the work associated with the task, preferably in chunks.

        [application endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    });
}