NSURLSession多个后台上传

时间:2014-07-08 20:05:21

标签: ios multithreading nsurlsession nsurlsessionuploadtask

在我的应用程序中,我正在创建一个带有单个标识符的后台会话(使用单例方法),当用户尝试上传他们的" Orders"时,它有~50-100个上传任务(图像)。每个订单都有大约25张图片需要上传。

我将OrderID存储为taskDescription,我的委托方法如下所示

-(void)URLSession:(NSURLSession *)session
         task:(NSURLSessionTask *)task
didCompleteWithError:(NSError *)error
{
    if(!error)
    {
        [session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks,     NSArray *downloadTasks) 
        {
            bool hasMoreTasks = false;

            //Loops through tasks, if there is another task with same identifier
            //then DON'T change status of order to uploaded
            for(NSURLSessionUploadTask *uTask in uploadTasks)
            {
                if([uTask.taskDescription isEqualToString:task.taskDescription])
                {
                    hasMoreTasks = true;
                    break;
                }
            }

            if(!hasMoreTasks) {
                NSLog(@"all tasks completed for order: %@", task.taskDescription);
                //Get Order from Core Data, update Order status to "Sent"
                dispatch_async(dispatch_get_main_queue(), ^{
                     //Stop the spinner on my page and decrement number of orders ready
                     //for upload
                });
            }
       }
    }

}

所有订单上传到我的服务器都很好。它更新了UI和CoreData这就是问题所在。如果我排队上传3个订单,似乎全部3个上传,但最后它说一个订单仍然没有上传。

仅用于调试目的,这是我的viewWillAppear

-(void)viewWillAppear
{
     NSLog(@"viewWillAppear");
     [self.backgroundSession getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {
        NSLog(@"task count: %@", [NSNumber numberWithInteger:[uploadTasks count]]);
        for(NSURLSessionUploadTask *task in uploadTasks)
        {
            NSLog(@"upload task %ld", task.state);

        }
     }];
}

首次使用此应用程序时,日志将显示" viewWillAppear",然后"任务计数"以及所有上传任务,但在我尝试上传或使用应用程序之后,我的后台会话所处的线程完全停止工作,并且唯一要记录的是" viewWillAppear"不管我等多久。

似乎有些东西阻塞了我的后台线程/队列。有时我也会处于运行状态下没有做任何事情的任务......

非常感谢任何帮助/建议。

0 个答案:

没有答案