1

我正在开发一个 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。你能告诉我我这样做是否正确吗?

4

2 回答 2

3

是的,可达性类可以同时使用 WiFi 和 3G 来确定远程主机是否可达。

另外作为旁注,您可能需要考虑在启动应用程序时始终显示缓存数据,然后在后台异步更新到新数据。根据您的应用程序的上下文,这可以创建更好的用户体验,因为某些数据始终可用。

如果您有兴趣了解更多有关这方面的信息,可以在“iPhone 高级项目”一书中找到名为“Fake It 'Til You Make It: Tips and Tricks for Improvement Interface Responsiveness”的精彩章节。

于 2010-04-15T15:26:28.970 回答
1

是的,Reachability 类会告诉您是否可以使用任何网络方法访问它。

于 2010-04-15T13:28:58.203 回答