我的 iPhone 应用程序非常简单,只有一个视图可以处理所有事情,在 viewDidLoad 中我检查是否有互联网连接,如果有,我们从网络加载,如果没有,我们从本地资源加载。这很好用。
//in viewDidOnload
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleNetworkChange:)
name:kReachabilityChangedNotification object:nil];
reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];
NetworkStatus status = [reachability currentReachabilityStatus];
if (status == NotReachable) {
//Do something offline
} else {
//Do sometihng on line
}
- (void)handleNetworkChange:(NSNotification *)notice{
NetworkStatus status = [reachability currentReachabilityStatus];
if (status == NotReachable) {
//Change to offline Message
} else {
//Relaunch online application
}
}
为了测试我的handleNetworkChange事件,我关闭了所有蜂窝数据,但保持wifi打开。在 wifi 范围内,我启动了应用程序,一切都很完美。然后我走出了 wifi 的范围,但我的 handleNetworkChange 从未触发(使用 uiAlertView 进行测试)。站在 wifi 范围之外,我的应用程序可以正常启动离线消息。
我怀疑这是 ViewController 生命周期的问题,是否应该将此代码放在 AppDelegate 函数中?也许这是一个更好的开始设计。
事实证明这是一个内存管理问题,因为我没有保留可达性变量,所以一旦它超出范围,就会调用 dealloc 并调用 stopNotifier 方法。因此没有更新,因为我会走出范围。
所以而不是:
reachability = [Reachability reachabilityForInternetConnection];
I do
reachability = [[Reachability reachabilityForInternetConnection] retain];
一切正常!
我通过这一切学到的一件很酷的事情是,您只需关闭机场即可在模拟器中模拟丢失的连接。再也不用在外面闲逛了。 :)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)