0

我用IOS7

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

有什么可以帮助我的吗?

这是主要代码:

初始化下载地址:

NSURL *url = [NSURL URLWithString:dictionaryUrl];


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

设置 ASIHTTPRequest 委托:

request.delegate = self;

初始化文件保存路径:

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];
4

2 回答 2

1

首先,您需要使请求在后台运行。添加这个:

[请求 setShouldContinueWhenAppEntersBackground:YES];

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

我已经通过无限期地每 x 秒添加计时器和触发 API 来回答位置更新问题。使用UIBackgroundTaskIdentifierNSTimer。这应该给你一个想法。应该与您正在做的事情相同的概念。

如何在我的 iOS 应用程序中每 n 分钟更新一次后台位置?

于 2013-10-20T07:57:52.267 回答
0

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

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

以及在后台运行任务的代码片段,您可以找到各种链接,例如:如何保持 iPhone 应用程序在后台运行完全可操作

于 2013-10-20T07:42:01.227 回答