1

NSString の stringWithContentsOfURL:encoding:error: メソッドを使用して接続要求が機能しています。初めて接続に失敗した場合、接続を再試行できるようにしたい。NSURLRequest のタイムアウト機能を使用するように関数を書き直すつもりでしたが、失敗する前に複数の再試行を使用したいと思います。

カウンターループのような大雑把なことをする以外に、Objective-C でデータの URL 再試行を再試行する受け入れられた方法はありますか?

編集:わかりました、興味のあるデータを取得するために NSURLConnection を実装し、NSError を使用してエラーの基本的な処理を追加しました。これが私の最初の刺し傷です:

- (id)initWithURL:(NSURL*)aURL {
    NSError     *error      = nil;
    NSURLResponse   *response   = nil;

    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:aURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:20];

    NSData *data = [NSURLConnection sendSynchronousRequest:request  returningResponse:&response error:&error];

    NSString *xmlString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    if (response == nil) {
        if (error) {
            NSLog(@"Error has occurred: %@", [error localizedDescription]);
        }
    }
}

注: 適切に失敗するための戦略はまだ実装していません。とりあえずエラーを記録しているだけです。

このコード (または提案された改善点) を使用して、ここで再試行戦略を実装する最良の方法は何でしょうか?

4

2 に答える 2

3

使用しないでください+stringWithContentsOfURL:。適切な NSURLConnection を使用してください。ロードが失敗した理由が表示されます。

于 2010-08-12T10:31:23.117 に答える
0

カウンターアプローチはそれほど悪くないと思います。この関数呼び出しがメイン パン上になく、UI をブロックしていない限り、おそらく他にできることはあまりありません。再試行する回数のカウンターを維持し、if ブロックで再試行してカウンターをインクリメントします。

于 2010-10-25T02:31:00.597 に答える