首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS Reachability未能捕获连接到WiFi但未登录的情况

iOS Reachability未能捕获连接到WiFi但未登录的情况
EN

Stack Overflow用户
提问于 2013-03-09 03:02:44
回答 4查看 2.8K关注 0票数 3

今天,我公开发布了我的Beta版应用程序。我当时在一家酒店,还没有获得WiFi的访问代码。在测试可达性时,我注意到它并没有像它应该的那样失败。它是连接到WiFi的,但是由于我没有登录,所以没有任何东西可以联系到。这个用例应该包含在reachabilityWithHostname.中。这是我的密码:

在附录代表中:

代码语言:javascript
复制
@interface AppDelegate : UIResponder <UIApplicationDelegate> {

    Reachability* hostReach;
    Reachability* internetReach;
    Reachability* wifiReach;
}

在附录代表中:

代码语言:javascript
复制
    internetReach = [Reachability reachabilityForInternetConnection];
    [internetReach startNotifier];

    wifiReach = [Reachability reachabilityForLocalWiFi];
    [wifiReach startNotifier];

    hostReach = [Reachability reachabilityWithHostname: @"http://www.google.com"];
    [hostReach connectionRequired];
    [hostReach startNotifier];

在需要连接的模块中:

代码语言:javascript
复制
- (BOOL) isInternetReachable
{
    Reachability *currentReach = [Reachability reachabilityForInternetConnection];
    NetworkStatus netStatus = [currentReach currentReachabilityStatus];


    return (netStatus == ReachableViaWiFi || netStatus == ReachableViaWWAN);
}

有人知道如何掩盖这种情况吗?

EN

回答 4

Stack Overflow用户

发布于 2013-03-09 03:07:19

代码语言:javascript
复制
...
[Reachability reachabilityWithHostname: @"http://www.google.com"]
...

您应该在每个http://中使用主机名(没有苹果的文档 )。

票数 3
EN

Stack Overflow用户

发布于 2013-03-09 03:18:47

你使用Reachability是错误的。苹果的文档非常糟糕,所以忽略它吧。

诀窍是首先尝试在没有咨询的情况下建立一个网络连接的。NSURLConnection将启动收音机并根据需要进行连接。当然,一定要处理错误。

当网络离线后恢复联机时,可达性仍然非常有用。如果您有事先无法发送/接收的信息,您可以在此重新尝试连接。

另外,您不应该在主线程上调用Reachability。在质量较差的网络上,特别是高丢包或DNS中断的情况下,Reachability会挂起你的应用程序超过20秒,系统会杀死你。

票数 3
EN

Stack Overflow用户

发布于 2013-08-20 12:22:06

我使用可达性来证明网络层。当它应该是好的,我试着从我的服务器加载一个字节的文件,以真正确定。表演没问题。

代码语言:javascript
复制
BOOL isOnline =  [[[RKClient sharedClient] reachabilityObserver] isReachabilityDetermined] != YES || [[RKClient sharedClient] isNetworkReachable];

    if(isOnline){
        NSData *data = [NSData dataWithContentsOfURL:[[URLManager sharedInstance]availabilityCheckURL]];

        NSString *strTemp = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
        isOnline = [strTemp isEqualToString:@"1"];
    }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15306658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档