NSURLSession 中的任务标识符不会更改



我正在尝试通过应用程序中的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的实例,request是NSMutableURLRequest实例,正文是NSData。输出为:

"task ID 1"

我会执行以下操作来跟踪

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 创建的标识符。此 id 是自动创建的,因此不知道它是 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,则 ID 将始终以 1 开头您只能创建一次网址

相关内容

  • 没有找到相关文章

最新更新