Ios NSURLSession中的TaskIdentifier未更改
我正在尝试通过我的应用程序中的NSURLSession上传多个视频。但每个请求的taskIdentifier都是相同的。不是每个请求都能得到零钱。我们如何跟踪我们的请求?我们怎么知道哪一个是完整的 这是我的代码:Ios NSURLSession中的TaskIdentifier未更改,ios,nsurlrequest,nsurlsessionuploadtask,backgroundtaskidentifier,Ios,Nsurlrequest,Nsurlsessionuploadtask,Backgroundtaskidentifier,我正在尝试通过我的应用程序中的NSURLSession上传多个视频。但每个请求的taskIdentifier都是相同的。不是每个请求都能得到零钱。我们如何跟踪我们的请求?我们怎么知道哪一个是完整的 这是我的代码: _uploadTask = [_session uploadTaskWithRequest:request fromData:body completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable r
_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);
"task ID 1"
此处:_uploadTask是NSURLSessionPloadTask的实例,_session是NSURLSession的实例,request是NSMutableURLRequest实例,body是NSData。
输出为:
_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);
"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];
我会做下面的事情来跟踪
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];
首先,添加一个属性,以便存储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];
好的,您的问题是已知的,并且它是异步工作的,这就是为什么它被分配了相同的任务标识符。虽然有可用的调整解决方案。好的,您的问题是已知的,它异步工作,这就是为什么它被分配了相同的任务标识符。虽然有调整解决方案可用。