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 のインスタンス、リクエストは NSMutableURLRequest インスタンス、本文は 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 に答える