2

以下の実装がありNSURLSessionます。

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
self.session = [NSURLSession sessionWithConfiguration:configuration
                                                               delegate:self
                                                               delegateQueue: nil];

NSURLSessionDataTask *task = [self.session dataTaskWithRequest:request];
[task resume];        
while(!finished) {
    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:100000]];
}  

そして、私は以下のデリゲートメソッドを実装しました:

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data  
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)aresponse  
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didCompleteWithError:(NSError *)error  
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge 
  completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition,
                         NSURLCredential *credential))completionHandler  

上記のwhileループの「終了」変数は、didCompleteWithErrorデリゲートが受信されたときに1に設定され、ネットワークダウンなどの問題があることを示します...

ネットワークがダウンすると、 が取得されないためdidCompleteWithErrorcallback、10 秒のタイムアウトが指定されていても while ループが終了せず、アプリがクラッシュしてMemory warningが表示されます。

私はすべてのシナリオでdidReceiveData、didReceiveResponseコールバックを適切に受け取ります.didReceiveChallengeコールバックをチェックしていませんが、ここではHTTPsセットアップが必要です.

それで、私はあなたが私を助けることができるなら、私は尋ねたい次の質問があります:

1)didCompleteWithErrorネットワークがダウンしているときにコールバックが受信されないのはなぜですか?

2) ネットワークの問題がないことを考慮して、タスクが正常に完了したときにコールバックが受信されますか? いいえの場合didCompleteWithError、どのようなコールバックがタスクの完了を示しますか?connectionDidFinishLoadingNSURLConnection

タスクの開始時に、リクエスト パラメータで cachepolicy を使用しました。このため、didcompletewitherror は n と呼ばれず、代わりにキャッシング デリゲートを実装する必要がありますか??

皆さん、助けてください。ハマった。

ありがとうございました

4

2 に答える 2

0

delegateQueue :[NSOperationQueue mainQueue] delegateQueue :nil の代わりにトリックを行いました。方法はまだわかりません。しかし、はい、問題はなくなりました。誰かがこれがどのように機能したか説明できますか?

于 2015-10-09T13:43:48.213 に答える