Ну, лично я использую следующую технику для проверки доступности Интернета (будь то WiFi или 3G).Я добавляю специальный класс для этого (в моем случае я называю это WiFiCheckClass
), и в файле .h я делаю:
#import <Foundation/Foundation.h>
#import "SystemConfiguration/SCNetworkReachability.h"
@interface UIDevice (DeviceConnectivity)
+(BOOL) cellularConnected;
+(BOOL) wiFiConnected;
+(BOOL) networkConnected;
@end
И в файле .m я делаю:
#import "WiFiCheckClass.h"
@implementation UIDevice (DeviceConnectivity)
+(BOOL) cellularConnected
{
SCNetworkReachabilityFlags flags = 0;
SCNetworkReachabilityRef netReachability;
netReachability = SCNetworkReachabilityCreateWithName(CFAllocatorGetDefault(), [@"www.google.com" UTF8String]);
if(netReachability)
{
SCNetworkReachabilityGetFlags(netReachability, &flags);
CFRelease(netReachability);
}
if(flags & kSCNetworkReachabilityFlagsIsWWAN) return YES;
return NO;
}
+(BOOL) networkConnected
{
SCNetworkReachabilityFlags flags = 0;
SCNetworkReachabilityRef netReachability;
BOOL retrievedFlags = NO;
netReachability = SCNetworkReachabilityCreateWithName(CFAllocatorGetDefault(), [@"www.google.com" UTF8String]);
if(netReachability)
{
retrievedFlags = SCNetworkReachabilityGetFlags(netReachability, &flags);
CFRelease(netReachability);
}
if (!retrievedFlags || !flags) return NO;
return YES;
}
+(BOOL) wiFiConnected
{
if ([self cellularConnected]) return NO;
return [self networkConnected];
}
@end
Теперь, когда мне нужно узнать, есть ли подключение к Интернету, я импортирую библиотеку и выполняю следующий тест:
if([UIDevice cellularConnected] || [UIDevice networkConnected] || [UIDevice wiFiConnected])
{
//there is Internet, do what you want
}