1

Я пытаюсь загрузить несколько видео через NSURLSession в моем приложении. Но taskIdentifier для каждого запроса близок. Он не получает изменений для каждого запроса. Как мы можем отслеживать наш запрос? Как мы можем узнать, какой из них закончен?TaskIdentifier в NSURLSession не меняет

Это мой Код:

_uploadTask = [_session uploadTaskWithRequest:request fromData:body completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { 

    id jsonResponse= [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error]; 

    }]; 

[_uploadTask resume]; 
NSLog(@" task ID %ld",_uploadTask.taskIdentifier); 

Здесь: _uploadTask является экземпляром NSURLSessionUploadTask, _SESSION является экземпляром NSURLSession, запрос NSMutableURLRequest экземпляра и тело NSData. результат:

"task ID 1" 

ответ

0

Я хотел бы сделать следующее, чтобы следить за

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; 
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; 
NSURL *URL = [NSURL URLWithString:@"http://someurl.com"]; 
NSURLRequest *request = [NSURLRequest requestWithURL:URL]; 
NSURLSessionDataTask *someTask= [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { 
     if (error) { 
      NSLog(@"error!"); 
     } else { 
      NSLog(@"task successful!"); 
     } 
    }]; 
    [someTask resume]; 
+0

Хорошо, но здесь я не использую AFNetworking библиотеки –

+0

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

0

Во-первых, добавить свойство, так что вы можете хранить идентификатор созданного NSURLSession. Этот идентификатор создается автоматически, поэтому неизвестно, составляет ли он 1,2,3 или что-то еще. Поэтому вам нужно хранить его во время создания задачи.

_uploadTask = [_session uploadTaskWithRequest:request fromData:body completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { 

    // do your thing 

    }]; 
_myTaskID = [_uploadTask taskIdentifier]; 
[_uploadTask resume]; 

Затем вызовите этот метод, чтобы отменить эту задачу необходимо

- (void)cancelTaskByIdentifer:(long)myTaskID { 

    [[NSURLSession sharedSession] getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) { 

     if (!dataTasks || !dataTasks.count) { 
      return; 
     } 
     for (NSURLSessionTask *task in dataTasks) { 
      long taskId = [task taskIdentifier]; 
      if (taskId==myTaskID) [task cancel]; 
     } 
    }]; 
} 

Например:

[self cancelTaskByIdentifier:_myTaskID]; 
Смежные вопросы