如何同步检查网络?我希望网络检查阻止调用线程并返回正确的结果
我尝试了tonymillion's Reachability和AFNetworkReachabilityManager,但他们都使用回调阻止。这意味着在回调之前,可达性状态是未知的。
我想在applicationDidFinishLaunchingWithOptions:
检查网络,但此时,可达性为AFNetworkReachabilityStatusUnknown
(AFNetworkReachabilityManager)或不可靠(tonymillion的可达性)
我看到唯一的方法是针对某些主机(例如google.com)执行NSURLConnection,例如Check for internet connection - iOS SDK
还有更好的方法吗?
答案 0 :(得分: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;
}
}