Нет подключения к Интернету в UIWebView и NSURLRequest
У меня есть приложение, которое полностью основано на веб-интерфейсах и для подключения к нему требуется подключение к Интернету. В основном веб-сайт просматривается через UIWebView.
Мне нужно сообщить пользователю, что никакие страницы не могут загружаться, если у них нет подключения к Интернету. Есть ли простой способ, которым я могу это сделать. Возможно, проверка, если NSURLRequest не удалось?
Приветствия
Ответы
Ответ 1
Я бы посмотрел пример Apple Reachability, чтобы реализовать это надежно. Одним из преимуществ этого подхода является то, что вы можете уведомить пользователя о текущем состоянии сети, даже если пользователь не нажимает на какие-либо ссылки в веб-представлении.
Ответ 2
проверьте следующее.
fooobar.com/questions/1072/...
fooobar.com/questions/134360/...
stackoverflow3
Ответ 3
1 > Добавьте в проект проект SystemConfiguration.framework
2 > импортируйте следующие файлы .h в файл Connection.h
#import <sys/socket.h>
#import <netinet/in.h>
#import <SystemConfiguration/SystemConfiguration.h>
3 > объявить следующий метод класса в файле Connection.h
+(BOOL)hasConnectivity;
4 > определите этот метод в файле Connection.m
+(BOOL)hasConnectivity {
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;
SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr*)&zeroAddress);
if(reachability != NULL) {
//NetworkStatus retVal = NotReachable;
SCNetworkReachabilityFlags flags;
if (SCNetworkReachabilityGetFlags(reachability, &flags)) {
if ((flags & kSCNetworkReachabilityFlagsReachable) == 0)
{
// if target host is not reachable
return NO;
}
if ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0)
{
// if target host is reachable and no connection is required
// then we'll assume (for now) that your on Wi-Fi
return YES;
}
if ((((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) ||
(flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0))
{
// ... and the connection is on-demand (or on-traffic) if the
// calling application is using the CFSocketStream or higher APIs
if ((flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0)
{
// ... and no [user] intervention is needed
return YES;
}
}
if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN)
{
// ... but WWAN connections are OK if the calling application
// is using the CFNetwork (CFSocketStream?) APIs.
return YES;
}
}
}
return NO;
}