4th*_*ace 5 iphone objective-c
Apple的名为Reachability的示例应用程序显示了如何检测连接.如果你只有wifi而不是互联网,应用程序在下面的第二行停止超过一分钟:
SCNetworkReachabilityFlags reachabilityFlags;
BOOL gotFlags = SCNetworkReachabilityGetFlags(reachabilityRef, &reachabilityFlags);
Run Code Online (Sandbox Code Playgroud)
SCNetworkReachabilityGetFlags来自SystemConfiguration.framework.有关如何绕过这个的任何建议?
要直接回答你的问题,不,似乎没有任何办法"绕过"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];
}
Run Code Online (Sandbox Code Playgroud)
选项2.在尝试连接到远程主机时,使用使用超时值的其他API /函数.这样你的应用程序只会在放弃之前挂起X秒.
其他一些注意事项: