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