我正在开发一个iPad应用程序,我正在试图找出决定用户是否可以连接到Internet的最佳方法。如果用户没有连接,我将加载缓存数据,否则我将加载新数据。我正在尝试使用Apple的可达性类,我想看看我是否正确地执行此操作。在applicationDidFinishLaunchingWithOptions中,我这样做:
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil];
Reachability hostReach = [[Reachability reachabilityWithHostName: @"www.apple.com"] retain];
[hostReach startNotifer];
然后我的reachabilityChanged:看起来像这样:
- (void)reachabilityChanged:(NSNotification* )note {
Reachability *curReach = [note object];
self.internetConnectionStatus = [curReach currentReachabilityStatus];
if (internetConnectionStatus == NotReachable) {
[viewController getDataOffline];
} else {
if (![[NSUserDefaults standardUserDefaults] objectForKey:kFIRST_LAUNCH]) [viewController getCurrentLocation];
else [viewController getData];
}
}
目前,这适用于WiFi iPad。我只是想确保这适用于3G iPad。如果我正确地做到这一点,你能告诉我吗?
答案 0 :(得分:3)
是的,可达性类可以使用WiFi和3G来确定远程主机是否可访问。
另外,作为附注,您可能需要考虑始终在启动应用程序时显示缓存数据,然后在后台异步更新到新数据。根据应用程序的上下文,这可以创建更好的用户体验,因为一些数据始终可用。
如果您有兴趣了解更多相关信息,可以在“iPhone高级项目”一书中找到一个很棒的章节,标题为“假你做到了:提高界面响应能力的提示和技巧”。
答案 1 :(得分:1)
是的,Reachability类会告诉您是否可以使用任何网络方法访问它。