2011-02-03 42 views
4

我有一個使用Apples可達性代碼的應用程序。當我退出應用程序,打開飛行模式,回到應用程序,我正確地得到一條消息,說沒有可用的連接。如果我退出時關閉飛行模式並返回到應用程序,我仍然收到沒有連接可用的消息。具體問題的代碼是這樣的:即使無線可用,SCNetworkReachabilityGetFlags也會返回0

NetworkStatus status = kNotReachable; 
if (SCNetworkReachabilityGetFlags(reachabilityRef, &flags)) 
{ 
    status = [self networkStatusForFlags: flags]; 
    return status; 
} 

我進去if語句和標誌結束是0(kSCNetworkReachabilityFlagsTransientConnection)。這是什麼意思?有沒有人經歷過這個,有誰知道解決方法或修復?一直玩它幾個小時...

+0

kSCNetworkReachabilityFlagsTransientConnection的值爲1 << 0(它是1)。你得到0,這意味着沒有設置標誌。 – jhabbott 2012-01-06 17:21:26

+0

@PsychoDad你是如何解決這個問題的? – Sandeep 2013-04-25 19:39:45

+0

@Sandeep我認爲問題出在一些非常糟糕的公司WiFi上。一年多來我還沒有看到這個問題。 – jjxtra 2013-04-25 20:54:46

回答

10

我發現這是由提供協議說明符的主機名引起的(如http://hostname而不是hostname)。嘗試單獨指定主機名以查看是否可以修復您的問題。

0

如果收到的標誌,他們最終爲0,如你所見,這表明飛行模式打開。但是,這個檢查的結果似乎被緩存了,至少在很短的時間內。試試這個:離開你的應用程序,關閉飛行模式,在移動Safari中打一個網站,然後返回到你的應用程序。這可能會使緩存無效。

1

調用SCNetworkReachabilityGetFlags之後,還需要調用CFRelease以避免緩存網絡狀態。請參閱下面的實現:

SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, host_name);

SCNetworkReachabilityFlags flags; 
success = SCNetworkReachabilityGetFlags(reachability, &flags); 
bool isAvailable = success && (flags & kSCNetworkFlagsReachable) && 
!(flags & kSCNetworkFlagsConnectionRequired); 
CFRelease(reachability); 
if (isAvailable) { 
    NSLog(@"Host is reachable: %d", flags); 
    return true; 
}else{ 
    NSLog(@"Host is unreachable"); 
    return false; 
} 
0

我有同樣的問題,但只有當我在模擬器中測試時纔會發生。我花了2天時間瘋了,然後在設備上進行測試,它的功能非常強大! 不知道爲什麼...

相關問題