iPhone可达性检查

我已经find了几个代码示例来做我想做的事(检查可达性),但是没有一个看起来对我有用。 我不明白为什么这不想玩好。

在我的项目中,我有可达性

#import <SystemConfiguration/SystemConfiguration.h> 

我已经添加了框架。 我也有:

 #import "Reachability.h" 

在我试图使用可达性的.m的顶部。

 Reachability* reachability = [Reachability sharedReachability]; [reachability setHostName:@"http://www.google.com"]; // set your host name here NetworkStatus remoteHostStatus = [reachability remoteHostStatus]; if(remoteHostStatus == NotReachable) {NSLog(@"no");} else if (remoteHostStatus == ReachableViaWiFiNetwork) {NSLog(@"wifi"); } else if (remoteHostStatus == ReachableViaCarrierDataNetwork) {NSLog(@"cell"); } 

这给了我各种各样的问题。 我究竟做错了什么? 我是一个很好的编码员,当我想知道我想要做什么或不知道要做什么时,我需要把自己想做的事情放在哪里,我只是很难。 (太令人沮丧了)

更新:这是怎么回事。 这是在我的viewcontroller,我有

 #import <SystemConfiguration/SystemConfiguration.h> 

 #import "Reachability.h" 

设置。 这是我迄今为止最不喜欢的编程部分。 可达性问题http://sneakyness.com/reachability.png


FWIW,我们从来没有结束在我们的代码中实现这一点。 需要访问互联网(进入抽奖和购买DVD)的两个function并不是主要function。 没有别的要求互联网接入。

我们不是添加更多的代码,而是将互联网视图的背景设置为通知,告诉用户他们必须连接到互联网才能使用此function。 它与应用程序界面的其余部分是主题,并做得很好/有品味。 在审批过程中,他们什么都没有说,但是我们确实收到了一个私人电话,以确认我们是否放弃了与电影有关的物品。 根据他们通常模糊的协议,你不可以有其他的抽奖活动。

我也认为这样做更严格地遵循“只有在绝对需要的情况下才能使用”思想。

这里是应用程序EvoScanner的iTunes链接。

在屏幕截图中,您似乎没有将Reachability添加到您的项目中。 您必须从Apple下载Reachability:

https://developer.apple.com/library/content/samplecode/Reachability/Introduction/Intro.html

并将.h和.m文件添加到您的项目。

更新:你注意到你有可达性。 但是看最新的版本,我可以看到你列出的错误的原因 – 他们改变了API,你可能使用了你在其他地方find的示例代码。 尝试:

在.h文件中:

 //import Reachability class #import "Reachability.h" // declare Reachability, you no longer have a singleton but manage instances Reachability* reachability; 

在.m文件中:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNetworkChange:) name:kReachabilityChangedNotification object:nil]; reachability = [Reachability reachabilityForInternetConnection]; [reachability startNotifier]; NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus]; if(remoteHostStatus == NotReachable) {NSLog(@"no");} else if (remoteHostStatus == ReachableViaWiFi) {NSLog(@"wifi"); } else if (remoteHostStatus == ReachableViaWWAN) {NSLog(@"cell"); } ..... - (void) handleNetworkChange:(NSNotification *)notice { NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus]; if(remoteHostStatus == NotReachable) {NSLog(@"no");} else if (remoteHostStatus == ReachableViaWiFi) {NSLog(@"wifi"); } else if (remoteHostStatus == ReachableViaWWAN) {NSLog(@"cell"); } } 
 [reachability setHostName:@"http://www.google.com"]; 

注意! 如果使用http://前缀,我遇到了总是“NotReachable”的问题。

拉斐尔

这是正确的代码,因为它适用于我今天!

 [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(handleNetworkChange:) name: kReachabilityChangedNotification object: nil]; reachability = [Reachability reachabilityForInternetConnection]; [reachability startNotifier]; NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus]; if(remoteHostStatus == NotReachable) {NSLog(@"no");} else if (remoteHostStatus == ReachableViaWiFi) {NSLog(@"wifi"); } else if (remoteHostStatus == ReachableViaWWAN) {NSLog(@"cell"); } 

你有任何地方的代码?

 [reachability startNotifier]; 

如果你的可达性代码来自苹果的例子,那么你需要这样做,才能开始向你报告状态更新。

改变这一点

 reachability = [Reachability reachabilityForInternetConnection]; 

对此

 reachability = [[Reachability reachabilityForInternetConnection] retain];