互联网检查不适用于所有设备ios应用程序

问题描述:

我是一名新的iPhone开发人员。我已经创建了一个iOS应用程序,用于检查互联网可用性。互联网检查不适用于所有设备ios应用程序

我用下面的方法:

-(BOOL)connectedToInternet 
{ 
    NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"] 
                encoding:NSStringEncoding 
                error:nil]; 
    return (URLString != NULL) ? YES : NO; 
} 

applicationDidFinishLaunching我呼吁的方法,并显示警告,如果没有连接,否则进入第二个屏幕。

我已经在我的iPhone(iOS 4.3.1)和iPad(iOS 4.3.3)中下载了该应用程序。它成功地运作。

但我的客户说他下载了他的iPhone(iOS 4.3.5),并且它总是显示“没有Internet连接”警告。

我已经搜索了几个网站,以找到问题和永久的解决方案。但我没有发现我的错在哪里,为什么应用程序不能使用所有设备。

+1

iOS 4.5;是一个错字? – deanWombourne

您可能希望将该方法更改为使用可达性API在IOS上检测Internet可用性的“正确”方法。

看看例如this SO answerApples sample如何做到这一点。

苹果推荐的方法,如果一个设备在线是使用Reachability类 - 在这里看到的示例代码:http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html

首先,这是一个糟糕的方式检查连接。请看Apple的Reachability示例代码。

其次,你这样做:

NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"] encoding:NSStringEncoding error:nil]; 

停止传递nil作为错误参数。

NSError *error; 
NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"] encoding:NSStringEncoding error:&error]; 

如果URLString回来nil,把error在您的警报。

亲自使用以下技术来测试Internet可用性(无论是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 

现在任何时候我需要知道是否有Internet连接我导入库并执行以下测试:

if([UIDevice cellularConnected] || [UIDevice networkConnected] || [UIDevice wiFiConnected]) 
{ 
    //there is Internet, do what you want 
}