Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSURLSession中的TaskIdentifier未更改_Ios_Nsurlrequest_Nsurlsessionuploadtask_Backgroundtaskidentifier - Fatal编程技术网

Ios 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

我正在尝试通过我的应用程序中的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);
"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];

好的,您的问题是已知的,并且它是异步工作的,这就是为什么它被分配了相同的任务标识符。虽然有可用的调整解决方案。好的,您的问题是已知的,它异步工作,这就是为什么它被分配了相同的任务标识符。虽然有调整解决方案可用。