2009-12-21 50 views
0

我正在使用来自Apple站点的可达性示例代码。我已将Reachability.h和Reachability.m文件添加到我的项目中,同时我也添加了SystemConfiguration.framework。在我的视图控制器.m文件中添加了#import“Reachability.h”,并在我的视图控制器.h文件中声明了可达性变量。在我开始使用Reachability实例之前,所有内容都无错地编译。可达性示例代码

我收到ReachableViaWiFiNetwork and ReachableViaCarrierDataNetwork undeclared error。

为什么会发生这种情况?

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

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

回答

7

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

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

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

花了30秒钟来追踪这个错误。通过问自己明显的问题并收听编译器消息,您将节省大量时间。

这也将是更清洁,更高效的检查,

if (internetStatus == NotReachable) {} 

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

if ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] == NotReachable) {} 
+0

你是100%的权利。 – 2009-12-21 23:19:11