我想检查一下我是否在使用Cocoa Touch库的iOS上或在使用Cocoa库的macOS上有Internet连接
我想出了一种使用NSURL实现这一点的方法。我这样做似乎有点不可靠(因为即使谷歌有一天也可能倒闭,依赖第三方似乎很糟糕),虽然如果谷歌没有回应,我可以查看其他一些网站的回应,但这似乎是浪费,而且对我的应用程序来说是不必要的开销
-(BOOL)connectedpointernet
{
NSString*URLString=[NSString stringWithContentsOfURL:[NSURL URLWithString:@";http://www.google.com"]];
返回(URLString!=NULL)?是:否;
}
是不是我做的不好(更不用说iOS 3.0和macOS 10.4中不推荐使用stringWithContentsOfURL),如果是这样,有什么更好的方法来实现这一点
重要:此检查应始终异步执行。下面的大多数答案都是同步的,所以要小心,否则你会冻结你的应用程序
迅捷的
-
通过CocoaPods或Carthage安装:https://github.com/ashleymills/Reachability.swift
-
通过闭包测试可达性
让可达性=可达性()! 可达性.whenReachable={中的可达性 如果可达性.connection==.wifi{ 打印(“可通过WiFi访问”) }否则{ 打印(“可通过手机访问”) } } 可达性.whenUnreachable={uuu}in 打印(“无法访问”) } 做{ 尝试可达性 }抓住{ 打印(“无法启动通知程序”) }
目标-C
-
将
SystemConfiguration框架添加到项目中,但不要担心将其包含在任何地方 -
将Tony Million版本的
Reachability.h和Reachability.m添加到项目中(可在此处找到:https://github.com/tonymillion/Reachability) -
更新接口部分
“导入”;可达性; //将其添加到视图控制器的.m文件中的接口 @接口MyViewController() { 可达性*internetReachableFoo; } @结束 -
然后在视图控制器的.m文件中实现此方法,您可以调用该文件
//检查我们是否有internet连接 -(无效)testInternetConnection { internetReachableFoo=[Reachability reachabilityWithHostname:@";www.google.com";]; //可以上网 internetReachableFoo.reachableBlock=^(可达性*可达性) { //更新主线程上的UI dispatch\u async(dispatch\u get\u main\u queue()^{ NSLog(“耶,我们有互联网络!”; }); }; //无法访问Internet internetReachableFoo.unreachableBlock=^(可达性*可达性) { //更新主线程上的UI dispatch\u async(dispatch\u get\u main\u queue()^{ NSLog(“有人破坏了互联网”); }); }; [internetReachableFoo startNotifier]; }
重要提示:类是项目中使用最多的类之一,因此您可能会与其他项目发生命名冲突。如果发生这种情况,您必须将可达性.h和可达性.m文件对中的一个重命名为其他文件来解决此问题
注意:您使用的域并不重要。它只是测试任何域的网关