我正在尝试通过应用程序中的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 开头您只能创建一次网址