TaskIdentifier в NSURLSession не изменяется
Я пытаюсь загрузить несколько видео через NSURLSession в моем приложении. Но taskIdentifier для каждого запроса приходит один и тот же. Это не получать изменения для каждого запроса. Как мы можем отслеживать наш запрос? Как мы можем узнать, какой из них завершен?
Это мой код:
_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.OutPut это:
"task ID 1"
3 ответа
Я бы сделал следующее, чтобы отслеживать
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];
Сначала добавьте свойство, чтобы вы могли хранить идентификатор, созданный 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];
Была такая же проблема
Если вы создаете URLSession каждый раз, когда отправляете запрос, идентификатор всегда будет начинаться с 1. Вы должны создать URLSession только один раз.