1

我有一个使用来自 NSString 的 stringWithContentsOfURL:encoding:error: 方法的连接请求。如果第一次失败,我希望能够重试连接。我打算重写该函数以使用 NSURLRequest 的超时功能,但我想我真的很想在失败之前使用多次重试。

除了做一些粗略的事情,比如计数器循环之外,Objective-C 中是否有一种可接受的方式来重试 URL reuest 以获取数据?

编辑:好的,我实现了 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 回答