代码之家  ›  专栏  ›  技术社区  ›  Mark Struzinski

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

  •  1
  • Mark Struzinski  · 技术社区  · 14 年前

    我有一个连接请求使用nsstring中的stringWithContentsOfURL:Encoding:Error:Method工作。如果第一次连接失败,我希望能够重试连接。我本来打算重写函数来使用nsurlrequest的超时功能,但我想我真的想在失败之前使用多次重试。

    除了做一些粗糙的事情,比如计数器循环,还有一种在Objective-C中可以接受的方法来重试一个URL重用数据吗?

    编辑: 好的,我实现了nsurlconnection以获取我感兴趣的数据,并使用nserrror添加了一些基本的错误处理。这是我最初的尝试:

    - (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]);
            }
        }
    }
    

    注意:我还没有实现一个优雅地失败的策略,我现在只是记录错误。

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

    2 回复  |  直到 14 年前
        1
  •  3
  •   Mike Abdullah    14 年前

    不要使用 +stringWithContentsOfURL: . 使用适当的NSURL连接。它将告诉您加载失败的原因。

        2
  •  0
  •   D.C.    14 年前

    我不认为反方法这么差。只要这个函数调用不在主面包上,而是阻塞了UI,那么您可能就没有其他什么可以做的了。保持一个计数器,显示您想重试多少次,然后在if块中重试并递增计数器。