小编Jay*_*Jay的帖子

iOS后台任务使用NSURLSessionDataTask

我的应用程序中有飞行搜索功能,这需要很长时间才能获得数据(超过25秒).如果应用程序进入后台或进入睡眠模式,则互联网连接断开连接.

我已经使用苹果示例编写了下面的逻辑来使api请求继续进行,即使应用程序转到后台但它不起作用.

self.session = [self backgroundSession];
self.mutableData = [NSMutableData data];

NSURL *downloadURL = [NSURL URLWithString:@"http://jsonplaceholder.typicode.com/photos"];
NSURLRequest *request = [NSURLRequest requestWithURL:downloadURL];
self.dataTask = [self.session dataTaskWithRequest:request];
[self.dataTask resume];

- (NSURLSession *)backgroundSession
{
    static NSURLSession *session = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"com.example.apple-samplecode.SimpleBackgroundTransfer.BackgroundSession"];
        session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
    });
    return session;
}
Run Code Online (Sandbox Code Playgroud)

以下是委托方法

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask
didReceiveResponse:(NSURLResponse *)response
completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler {
 NSLog(@"response: %@", response.debugDescription);
 NSURLSessionResponseDisposition disposition = NSURLSessionResponseAllow;
    if (completionHandler) {
        completionHandler(disposition);
    }
} …
Run Code Online (Sandbox Code Playgroud)

ios background-task nsurlsessiondatatask

1
推荐指数
1
解决办法
4533
查看次数