Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSURLSession多后台上传_Ios_Multithreading_Nsurlsession_Nsurlsessionuploadtask - Fatal编程技术网

Ios NSURLSession多后台上传

Ios NSURLSession多后台上传,ios,multithreading,nsurlsession,nsurlsessionuploadtask,Ios,Multithreading,Nsurlsession,Nsurlsessionuploadtask,在我的应用程序中,我创建了一个带有单个标识符的后台会话(使用singleton方法),当用户试图上传他们的“订单”时,该会话有50-100个上传任务(图像)。每个订单大约有25张图片需要上传 我将OrderID存储为taskDescription,我的委托方法如下所示 -(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)er

在我的应用程序中,我创建了一个带有单个标识符的后台会话(使用singleton方法),当用户试图上传他们的“订单”时,该会话有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个订单都上传了,但最后还是显示一个订单没有上传

这里是我的视图,仅供调试之用

-(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);

        }
     }];
}
开始使用此应用程序时,日志将显示“ViewWillDisplay”,然后显示“Task Count”和所有上载任务,但在我尝试上载或使用该应用程序多一点后,我的后台会话所在的线程将完全停止工作,无论我等待多长时间,只会记录“ViewWillDisplay”

好像有什么东西阻塞了我的后台线程/队列。有时,我也会有一些处于运行状态的任务,它们什么也不做


非常感谢您的帮助/建议。

您的问题有什么答案吗?我对这种情况很感兴趣。