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];