2016-08-02 8 views
1

遅延の後にダウンロードタスクを再開するにはどうすればよいですか?URLSessionで失敗したダウンロードを再試行する:task:didCompleteWithError

が、私はこのスレッドを見ていた:

iOS NSURLSession, how to retry in didCompleteWithError

ロブによって提案された第三のアプローチは、私がやろうとしているが、私は遅延を設定する方法がわからないものです。私は10秒(発言を)待ってから再開したいと思います

-(void)URLSession:(NSURLSession*)session task:(NSURLSessionTask*)task didCompleteWithError:(NSError*)error { 
    if (error == nil) 
    return; 

    NSData* resume_data = error.userInfo[NSURLSessionDownloadTaskResumeData]; 
    NSURLSessionDownloadTask* new_task = [_session downloadTaskWithResumeData:resume_data]; 
    [new_task resume]; 
} 

はこれまでのところ、私はこのような何かを持っています。

答えて

1

[new_task resume]動作するかどうか、そのようになります:

[new_task performSelector:@selector(resume) withObject:nil afterDelay:10.0] 
+0

バックグラウンドスレッドから呼び出された場合、performSelector:withObject:afterDelay: 'は動作しません。 dispatch_afterを試してみてください。どんなスレッドからでも動作します(ただし、いくつか注意が必要です)。ありがとう。 – OlDor

+0

ありがとう。これは、遅延の後に関数を呼び出すという直ちの問題を解決しました。 – Ash

2

あなたが遅延した後、それを再開するべきではありません。それは、ネットワークに接続していないときに、たくさんのリソースを使ってアプリケーションにつながります。

代わりに、reachabilityを使用して、いつ再試行するのが適切かを判断してください。正確なホストの到達可能性オブジェクトを元のURLから作成し、その到達可能性オブジェクトによってホストに到達可能であることが示されたら、要求を再試行します。

+0

ありがとうございます。私は到達可能性を実装しました。 – Ash

関連する問題