私は s を使用しており、HTTP リクエストの一部にかかる時間を監視しようとしています。実際に最初のリクエストを行うNSURLSessionTask
ときに、どのデリゲート メソッド (または他の何か) を監視できますか? NSURLSessionTask
これがNSURLConnection
内部の場合NSOperation
、リクエストを開始するときにタイマーを開始するだけですが、タスクの開始時期を制御することはできません。
質問する
5075 次
3 に答える
4
NSURLSessionTaskDelegateを確認してください。次のデリゲート コールバックがあります。
URLSession:task:didCompleteWithError:
URLSession:task:didReceiveChallenge:completionHandler:
URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:
URLSession:task:needNewBodyStream:
URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:
時間間隔を計算します。
オプション 01 [概算]:
再開メソッドの呼び出しの直後にタイマーを開始し、デリゲート コールバック didCompleteWithError がいつ呼び出されるかを計算する必要があります。
self.dataTask = [self.session dataTaskWithRequest:theRequest];
[self.dataTask resume];
NSTimeInterval totalCountdownInterval;
NSDate* startDate = [NSDate date];
NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(checkCountdown:) userInfo:nil repeats:YES];
オプション 02 [精度が必要な場合]:
NSURLSessionTask のプロパティはすべて KVO に準拠しています。
[self.dataTask addObserver:self forKeyPath:@"someKeyPath" options:NSKeyValueObservingOptionOld context:nil];
[self.dataTask resume];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
// do some calculation after checking state
/*
NSURLSessionTaskStateRunning = 0,
NSURLSessionTaskStateSuspended = 1,
NSURLSessionTaskStateCanceling = 2,
NSURLSessionTaskStateCompleted = 3, */
}
于 2014-10-01T16:33:20.047 に答える