Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 可达性有时会失败,即使我们确实有互联网连接_Iphone_Objective C - Fatal编程技术网

Iphone 可达性有时会失败,即使我们确实有互联网连接

Iphone 可达性有时会失败,即使我们确实有互联网连接,iphone,objective-c,Iphone,Objective C,我已经搜索过了,但没有看到类似的问题 我添加了一个方法,根据可达性示例检查internet连接。它大部分时间都能工作,但当安装在iPhone上时,即使我有互联网连接,它也经常会失败(只有在3G/EDGE-WiFi正常的情况下) 基本上,下面的代码返回NO 如果我切换到另一个应用程序,比如Mail或Safari,然后连接,然后切换回该应用程序,则代码表示可以访问互联网。似乎它需要一个“轻推” 有人见过这个吗?有什么想法吗 非常感谢 詹姆斯 }看起来您已经从Apple示例代码中剥离了一些基本的可达性

我已经搜索过了,但没有看到类似的问题

我添加了一个方法,根据可达性示例检查internet连接。它大部分时间都能工作,但当安装在iPhone上时,即使我有互联网连接,它也经常会失败(只有在3G/EDGE-WiFi正常的情况下)

基本上,下面的代码返回NO

如果我切换到另一个应用程序,比如Mail或Safari,然后连接,然后切换回该应用程序,则代码表示可以访问互联网。似乎它需要一个“轻推”

有人见过这个吗?有什么想法吗

非常感谢 詹姆斯


}

看起来您已经从Apple示例代码中剥离了一些基本的可达性代码。当你把它原封不动地放在这里做这件事时会发生什么

Reachability *hostReach = [[Reachability reachabilityWithHostName: @"www.apple.com"] retain];

NetworkStatus netStatus = [hostReach currentReachabilityStatus];

if (netStatus == NotReachable)
{
    NSLog(@"NotReachable");
}

if (netStatus == ReachableViaWiFi)
{
    NSLog(@"ReachableViaWiFi");
}

if (netStatus == ReachableViaWWAN)
{
    NSLog(@"ReachableViaWWAN");
}

(很抱歉,注释中的代码格式无效)

对于版本2,代码应为:

+ (BOOL) doWeHaveInternetConnection2{

if([Reachability reachabilityForInternetConnection] == NotReachable) {
    return NO;
}
else
{
    return YES; 
}

}

我发现,您必须知道第一次从哪个线程(runloop)调用
startNotifier
。如果您从后台线程或
NSOperation
调用它,您将在该线程的运行循环上启动通知程序循环


如果您共享实例,可能像
[Reachability Reachability forinternetconnection]
中那样获取一个单例,那么从当前代码(2.0)来看,最后一个调用程序获胜,并将通知程序设置为其运行循环。

抱歉,我有点糊涂。我将示例可达性类添加到我的项目中,但无法编译。可达性*主机可达性=[[Reachability Reachability WithHostName:@“www.apple.com”]retain];不起作用。找不到reachabilityWithHostName方法。我将继续调整…这是有效的:+(BOOL)doWeHaveInternetConnection2{if([[Reachability sharedReachability]internetConnectionStatus]==NotReachable){返回否;}否则{返回是;}尽管代码已连接,但它始终为您提供“NotConnected”。但一旦它转到“reachabilityChanged”方法,它将为您提供正确的状态。那么首先如何获得正确的状态呢?调用
+SharedRachability
告诉我您使用的是2.0之前版本的可达性。最新的版本是在一周前发布的,它比使用单例的版本要好得多。Matt下面的答案是基于最新版本的,这就是为什么您在编译它时遇到问题的原因。获取最新版本,看看它是否更适合您的需要。//InternetConnection的可达性-检查默认路由是否可用。//应该由未连接到特定主机的应用程序使用。昨晚,在iphone设备上,在飞机模式下,此代码返回“是”,但检索URL时失败。所以我不会用这个。返回到检查与特定主机的连接。使用reachabilityWithHostName测试与特定主机的连接将返回假阳性,很明显,任何时候您的手机都被分配了IP地址。试试看:当你的手机连接到无线路由器时,拔下无线路由器的电缆,然后检查[Reachability Reachability WithHostName:]的结果,每次都是肯定的,即使你显然无法连接到主机。
+ (BOOL) doWeHaveInternetConnection2{
         if([[Reachability sharedReachability] internetConnectionStatus] == NotReachable) {
                   return NO;
          }
          else
          {
                  return YES; 
          }

}
+ (BOOL) doWeHaveInternetConnection2{

if([Reachability reachabilityForInternetConnection] == NotReachable) {
    return NO;
}
else
{
    return YES; 
}