我想知道是否有自动知道何时恢复连接的方式。
我的应用程序连接到web服务,假设网络在那一刻不可用,因此应用程序将无法从服务器获取信息,但我希望应用程序自动尝试重新连接到服务器,如果它“感觉“连接已经恢复。
有这样的回调吗?
答案 0 :(得分:2)
在您处理NSURLConnection的任何类中,您都需要添加一些连接检查。所以下面我发布了一个例子
您显然在首先启动连接之前检查networkStatus。
-(id)init
{
self = [super init];
if(self)
{
Reachability* newInternetReachability = [Reachability reachabilityForInternetConnection];
[newInternetReachability startNotifier];
self.networkReachability = newInternetReachability;
networkStatus = [self.networkReachability currentReachabilityStatus];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkReachabilityDidChange:) name:kReachabilityChangedNotification object:nil];
}
return self;
}
- (void) startHTTPRequest
{
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:YOUR_URL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:YOUR_REQUEST_TIMEOUT];
NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest: delegate:self];
}
- (void)networkReachabilityDidChange:(NSNotification *)notification
{
Reachability *currReach = [notification object];
NSParameterAssert([currReach isKindOfClass: [Reachability class]]);
int currStatus = [currReach currentReachabilityStatus];
// Check that current reachability is not the same as the old one
if(currReach != self.networkReachability)
{
switch (currStatus) {
case ReachableViaWiFi:
// fire off connection
[self startHTTPRequest];
break;
case ReachableViaWWAN:
// Fire off connection (3G)
[self startHTTPRequest];
break;
case NotReachable:
// Don't do anything internet not reachable
break;
default:
break;
}
[self updateReachability];
}
这只是一个简单的示例,但您可能需要保留请求,直到连接可用,以便以后可以将其关闭。这可以通过NSOperationQueue或类似的东西来完成。
答案 1 :(得分:1)
从标准库的角度来看,没有这样的事情。你必须自己实现它。您可以使用Apple的Reachability代码来监听网络更改。因此,一旦您收到来自可访问性代码的通知,说明互联网已连接,您就可以启动URL连接。如果你需要一个例子我可以快速为你嘲笑。