1

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

"task ID 1"
4

2 回答 2

0

首先,添加一个属性,以便您可以存储由 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];
于 2016-09-06T06:51:50.003 回答
0

我会做以下事情来跟踪

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];
于 2016-02-23T07:09:41.063 回答