在Objective-C中重试URL请求的可接受方法?

在Objective-C中重试URL请求的可接受方法?,objective-c,cocoa,nsstring,nsurlrequest,Objective C,Cocoa,Nsstring,Nsurlrequest,我有一个连接请求正在使用NSString中的stringWithContentsOfURL:encoding:error:method。如果第一次连接失败,我希望能够重试连接。我打算重写函数以使用NSURLRequest的超时功能,但我想我真的希望在失败之前使用多次重试 除了做一些粗制滥造的事情,比如反循环,Objective-C中是否有一种可以接受的方法来重试URL数据重新访问 编辑: 好的,我实现了NSURLConnection来获取我感兴趣的数据,并使用NSError添加了一些基本的错误处

我有一个连接请求正在使用NSString中的stringWithContentsOfURL:encoding:error:method。如果第一次连接失败,我希望能够重试连接。我打算重写函数以使用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]);
        }
    }
}
注意:我还没有实现一个优雅地失败的策略,我现在只是记录错误


使用此代码(或任何建议的改进),在此处实现重试策略的最佳方法是什么?

不要使用
+stringWithContentsOfURL:
。使用正确的连接。它将告诉您加载失败的原因。

我认为计数器方法没有那么糟糕。只要这个函数调用没有出现在主界面上,阻塞了UI,那么您可能就没有什么其他可以做的了。保留一个计数器,指示您要重试多少次,然后在if块中重试并递增计数器

虽然我不认为这是问题的答案,但从这开始是件好事。我将使用NSURLConnection并利用NSError找到操作失败的原因。那么重试场景呢?是否存在重试连接的常用模式?