asihttprequest下载文件,但屏幕锁定时关机

时间:2013-10-20 06:47:35

标签: ios objective-c asihttprequest

我使用IOS7

我开始下载并锁定屏幕,然后我打开屏幕。我的程序关机了......

有人可以帮助我吗?

这是主要代码:

init download url:

NSURL *url = [NSURL URLWithString:dictionaryUrl];


ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:url];

设置ASIHTTPRequest委托:

request.delegate = self;

init文件保存路径:

NSString *savePath = [path stringByAppendingPathComponent:name];

bool b=[ fileManager createFileAtPath :savePath contents : nil attributes : nil ];
if (b){
    fileHandle=[ NSFileHandle fileHandleForWritingAtPath :savePath];
}

[request setAllowResumeForFileDownloads:NO];
[request setDelegate:self];
[request setDidFinishSelector:@selector(requestDone:)];
[request setDidFailSelector:@selector(requestWentWrong:)];

[request setDataReceivedBlock :^( NSData * data){
    [fileHandle seekToEndOfFile ];
    [fileHandle writeData :data];
    [ label setText :[ NSString stringWithFormat : @"downloading...%.1f %%" , process . progress * 100 ]];

}];

[request setDownloadProgressDelegate:process];

添加到ASINetworkQueue:

[self.netWorkQueue addOperation:request];

重新申请:

[request release];

2 个答案:

答案 0 :(得分:1)

首先,您需要启用在后台运行的请求。加上这个:

  

[request setShouldContinueWhenAppEntersBackground:YES];

快速完成任务是可能的,就像魅力一样。但是对于长时间运行的任务,就像你想要的那样,为了继续下载,你需要添加一些代码,以使这个请求因为运行时间过长而被终止。

我已经无限期地每x秒添加一次计时器和激活API,回答了位置更新的问题。使用UIBackgroundTaskIdentifierNSTimer。这应该给你一个想法。应该是你正在做的事情的概念。

How do I get a background location update every n minutes in my iOS application?

答案 1 :(得分:0)

当您的屏幕锁定时,您的应用会转到后台。您可以在应用程序指向后台后的有限时间内执行任务,但仅限于提供的持续时间。运行时间超过此时间将导致您的应用程序终止。请参阅“iOS应用程序编程指南”中的“完成背景中的长时间运行任务”部分,了解如何进行此操作。

对于iOS7,您可以查看此链接https://stackoverflow.com/a/19355437/1372368

要在后台运行任务的代码段,您可以找到各种链接,例如:How to keep an iPhone app running on background fully operational