当前位置:  开发笔记 > 编程语言 > 正文

为什么Reachability样本应用程序停在这里?

如何解决《为什么Reachability样本应用程序停在这里?》经验,为你挑选了1个好方法。

Apple的名为Reachability的示例应用程序显示了如何检测连接.如果你只有wifi而不是互联网,应用程序在下面的第二行停止超过一分钟:

SCNetworkReachabilityFlags reachabilityFlags;
BOOL gotFlags = SCNetworkReachabilityGetFlags(reachabilityRef, &reachabilityFlags);

SCNetworkReachabilityGetFlags来自SystemConfiguration.framework.有关如何绕过这个的任何建议?



1> Clint Harris..:

要直接回答你的问题,不,似乎没有任何办法"绕过"SCNetworkReachabilityGetFlags()在你描述的特定情况下需要很长时间才能返回(例如,通过WiFi连接到路由器检查远程主机可达性没有互联网).有两种选择:

选项1.在单独的线程中进行调用,以便应用程序的其余部分可以继续运行.修改ReachabilityAppDelegate.m,如下所示:

// Modified version of existing "updateStatus" method
- (void)updateStatus
{
    // Query the SystemConfiguration framework for the state of the device's network connections.
    //self.remoteHostStatus           = [[Reachability sharedReachability] remoteHostStatus];
    self.remoteHostStatus = -1;
    self.internetConnectionStatus   = [[Reachability sharedReachability] internetConnectionStatus];
    self.localWiFiConnectionStatus  = [[Reachability sharedReachability] localWiFiConnectionStatus];
    [tableView reloadData];

    // Check remote host status in a separate thread so that the UI won't hang
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSTimer *timer = [NSTimer timerWithTimeInterval:0 target:self selector:@selector(updateRemoteHostStatus) userInfo:nil repeats:NO];
    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
    [pool release];
}
// New method
- (void) updateRemoteHostStatus
{
    self.remoteHostStatus = [[Reachability sharedReachability] remoteHostStatus];
    [tableView reloadData];
}

选项2.在尝试连接到远程主机时,使用使用超时值的其他API /函数.这样你的应用程序只会在放弃之前挂起X秒.

其他一些注意事项:

您询问的SCNetworkReachabilityGetFlags()的特定调用(即Reachability.m中的行~399)正在尝试查看www.apple.com是否"可达"以推断"外部互联网"是否"可达"一般来说.

在Apple的System Config框架中,"可达"可能并不意味着你的想法.根据官方文档,"可达"似乎意味着,理论上,您的计算机可以连接到主机X,但它可能需要首先实际建立连接(例如,首先拨打调制解调器).换句话说,SCNetworkReachabilityGetFlags()实际上并不建立连接.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有