2014-07-02 66 views
0

如何同步檢查網絡?我想網絡檢查,以塊調用線程並返回正確的結果如何同步檢查互聯網連接?

我試圖tonymillion's ReachabilityAFNetworkReachabilityManager,但它們都使用回調塊。這意味着回調之前可達性狀態是未知的。

我想在applicationDidFinishLaunchingWithOptions:但在這一點上,檢查網絡,可達性是AFNetworkReachabilityStatusUnknown(AFNetworkReachabilityManager)或不可靠(tonymillion的可達性)

我看到的唯一方法是對一些主機進行NSURLConnection的(google.com例如)像這樣Check for internet connection - iOS SDK

有沒有更好的辦法?

+0

您可以檢查currentReachabilityStatus財產任何時候無需啓動監控。 – vladof81

+1

http://stackoverflow.com/a/9358166/158983 – hujunfeng

+0

請注意阻止'applicationDidFinishLaunchingWithOptions'中的線程。如果您阻止它太久,應用程序將自動關閉。 – LyricalPanda

回答

1

要回答我的問題:它是可靠的

閱讀本Technical Q&A QA1693 Synchronous Networking On The Main Thread

可達性 - 系統配置框架可達API ()默認操作同步 。因此,似乎無害的例程,如 SCNetworkReachabilityGetFlags可以讓你被看門狗殺死。如果 您正在使用可達性API,則應該異步使用它。 這涉及使用SCNetworkReachabilityScheduleWithRunLoop 日常安排您的可達性查詢的運行循環

因此,我們可以這樣使用它iOS: Check whether internet connection is available

- (BOOL) isConnectionAvailable 
{ 
    SCNetworkReachabilityFlags flags; 
     BOOL receivedFlags; 

     SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(CFAllocatorGetDefault(), [@"dipinkrishna.com" UTF8String]); 
     receivedFlags = SCNetworkReachabilityGetFlags(reachability, &flags); 
     CFRelease(reachability); 

     if (!receivedFlags || (flags == 0)) 
     { 
      return FALSE; 
     } else { 
     return TRUE; 
    } 
}