Пользовательский интерфейс блокируется, когда задача загрузки в фоновом сеансе работает в iOS Objective C - PullRequest
0 голосов
/ 11 мая 2019

Приложение зависает и пользовательский интерфейс блокируется, когда задача загрузки выполняется в фоновом режиме

У меня есть фоновая сессия, как показано ниже

-(NSURLSession *)backgroundSession
{
    if (session==nil) {
        NSURLSessionConfiguration *configuration;

        //        configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
        if ([NSURLSessionConfiguration respondsToSelector:@selector(backgroundSessionConfigurationWithIdentifier:)]) {
            configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"com.xxx.xxx.BackgroundSession"];
        } else
        {
            configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"com.xxx.xxx.BackgroundSession"];
        }
        [configuration setSessionSendsLaunchEvents:YES];
        configuration.HTTPMaximumConnectionsPerHost = 1;
        session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
    }
    return session;
}

[self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {
        if ([downloadTasks count] > 0 ) {
            NSArray *filtered = [downloadTasks filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(self.taskDescription MATCHES %@)", [NSString stringWithFormat:@"SONGDATA_DOWNLOAD %@",songID]]];
            if([filtered count]>0)
            {
                for(NSURLSessionDownloadTask *PreviousDownloadTask in filtered)
                {
                    if(PreviousDownloadTask.state != NSURLSessionTaskStateRunning && PreviousDownloadTask.state != NSURLSessionTaskStateCompleted)
                    {
                        [PreviousDownloadTask resume];
                        NSLog(@"SONGDATA_DOWNLOAD already in queue %@ task Description %@",filtered,[NSString stringWithFormat:@"SONGDATA_DOWNLOAD %@",songID]);
                    }
                    return ;

                }
            }

        }
    }];





    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    self.downloadTask = [[self backgroundSession] downloadTaskWithRequest:request];
    downloadTask.taskDescription=[NSString stringWithFormat:@"SONGDATA_DOWNLOAD %@",songID];

    [self.downloadTask resume];

Но когда запрос отправляется, он терпит неудачу и получает результат

Произошла ошибка в соединении xpc для настройки фонового сеанса:

Ошибка домена = NSCocoaErrorDomain Code = 4097 "подключение к службе с именем com.apple.nsurlsessiond "UserInfo = {NSDebugDescription = подключение к сервис с именем com.apple.nsurlsessiond}

в течение нескольких минут, когда appfreeses и никакие действия пользовательского интерфейса не могут быть выполнены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...