0

我正在使用来自 Apple 网站的可达性示例代码。我在项目中添加了 Reachability.h 和 Reachability.m 文件,还添加了 SystemConfiguration.framework。在我的视图控制器 .m 文件中添加了 #import "Reachability.h" 并在我的视图控制器 .h 文件中声明了可达性变量。在我开始使用 Reachability 实例之前,一切都编译没有错误。

我收到ReachableViaWiFiNetwork 和 ReachableViaCarrierDataNetwork 未声明的错误。

为什么会这样?

reachability = [Reachability reachabilityForInternetConnection];
NetworkStatus internetStatus = [reachability currentReachabilityStatus];

if ((internetStatus != ReachableViaWiFiNetwork) && (internetStatus != ReachableViaCarrierDataNetwork))
{
}
4

1 回答 1

7

Reachability.h 列举了三种类型:NotReachable、ReachableViaWiFi 和 ReachableViaWWAN。

这些是您要检查的值,而不是 ReachableViaWiFiNetwork 或 ReachableViaCarrierDataNetwork。

如果编译器说这些值是未声明的,你应该问自己这些值是从哪里得到的?追踪你认为它们应该在哪里(Reachable 前缀是一个线索),然后找出你的错误。

跟踪此错误实际上花了 30 秒。通过问自己明显的问题并听取编译器消息,您将节省大量时间。

检查也会更清洁,更有效,

if (internetStatus == NotReachable) {}

此外,我不会创建实例变量并保存可达性,因为这可能会改变(因为这适用于移动设备)。每次需要连接时检查连接会更安全。因此,我倾向于写,

if ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] == NotReachable) {}
于 2009-12-21T22:34:22.113 回答