我有一个连接请求正在使用来自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]);
}
}
}
注意:我还没有实现优雅失败的策略,我现在只记录错误。
使用此代码(或任何建议的改进),在这里实施重试策略的最佳方法是什么?
答案 0 :(得分:3)
请勿使用+stringWithContentsOfURL:
。使用适当的NSURLConnection。它会告诉你加载失败的原因。
答案 1 :(得分:0)
我认为反制方法并不是那么糟糕。只要这个函数调用不在主面包上,阻止UI,那么你可能没有其他的东西可以做。保持计数器要重试的次数,然后在if块中重试并增加计数器。