Ios 在后台继续下载

Ios 在后台继续下载,ios,uiapplicationdelegate,background-task,Ios,Uiapplicationdelegate,Background Task,我正在创建一个应用程序,其中我正在从服务器下载一些数据。在后台运行时,我希望连接能够继续运行,以便可以下载数据。我知道appDelegate中有一种方法 - (void)applicationDidEnterBackground:(UIApplication *)application 当应用程序进入后台时调用。但是,由于连接是在viewController中创建的,如何在appDelegate中对其进行管理? 还有没有其他方法可以做到这一点?我已经通过链接,但有一个简单的实现 [编辑]

我正在创建一个应用程序,其中我正在从服务器下载一些数据。在后台运行时,我希望连接能够继续运行,以便可以下载数据。我知道appDelegate中有一种方法

- (void)applicationDidEnterBackground:(UIApplication *)application  
当应用程序进入后台时调用。但是,由于连接是在viewController中创建的,如何在appDelegate中对其进行管理?
还有没有其他方法可以做到这一点?我已经通过链接,但有一个简单的实现

[编辑]
很抱歉,我错了,正如评论中指出的那样,您可以延长一次/在您的应用程序进入后台之前执行操作的时间限制。这里是

我不知道你到底是如何处理数据下载的。但是你可以看看。它非常简单明了,如果将编译器标志设置为-fno objc ARC,则可以使用ARC。有了这个,你只需要使用

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setShouldContinueWhenAppEntersBackground:YES]; //For iOS 4.0 and up 
这就行了

您可以看到ASIHTTPRequest是如何工作的


希望有帮助

在后台继续执行某些操作的一种方法是创建一个单独的线程来进行下载。在线程内部,在调用beginBackgroundTaskWithExpirationHandler:和endBackgroundTask之间插入下载操作。您不需要检查是否在后台运行,只需始终调用这两个方法即可

// Tell iOS this as a background task in case we get backgrounded
UIBackgroundTaskIdentifier taskId = [[UIApplication sharedApplication] 
          beginBackgroundTaskWithExpirationHandler:NULL];

//----------------------------------------------
// Perform your download operations here
//----------------------------------------------
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

// Tell iOS that we are done with stuff that needed to keep going even if backgrounded    
[[UIApplication sharedApplication] endBackgroundTask:taskId];

这是官方的方法,我知道没有其他方法。你应该检查这个链接。这不是真的,你可以在后台执行一个最长10分钟。@rckoenes你确实是对的,我道歉。我将编辑我的答案。感谢您提供的信息:)仍然不正确,您可以在执行有限长度任务之前调用。一旦进入后台,就不需要执行这些操作。您可以在应用程序推送到后台之前启动任务。ASIHTTPRequest已不再处于活动开发状态。。。根据消息。只是说说而已。没错,但它仍然很有魅力。我还没有找到任何比ASIHTTPRequest功能更强大的替代方案。您可以设置ASIHTTPRequest属性:[request setShouldContinueWhenAppEntersBackground:YES];非常感谢你!!!如果我错了,请纠正我:总之,在后台或前台运行任务几乎没有区别。两者都将使用此代码执行。然而,我想到了两个不同点:1。如果你的后台任务太长,那么你可能会在完成它之前被终止!2.最好是
endBackgroundTask:taskId
,这样可以节省额外的电池。