2012-01-22 103 views
0

我是一名新的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

回答

0

您可能希望將該方法更改爲使用可達性API在IOS上檢測Internet可用性的「正確」方法。

看看例如this SO answerApples sample如何做到這一點。

4

首先,這是一個糟糕的方式檢查連接。請看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在您的警報。

1

親自使用以下技術來測試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 
} 
相關問題