1

我在这里看到了很多关于如何检查互联网连接是否可用的示例,但似乎没有人解释一次做某事的最佳实践方式/如果它可用。

我正在使用 Tony Million 的 Reachability 类,并且有一个“可用连接”块,一旦连接可用,它将布尔值(在线)设置为 true。Reachability 类在我的应用程序委托 didFinishLaunchingWithOptions 中初始化,但是当我的代码检查 Online Reachability 的状态时,仍然没有完成确定是否存在连接,因此我的应用程序在首次启动时始终认为自己处于脱机状态。

现在,我可以将需要连接的代码放入“可用连接”块中,但是我的应用程序需要互联网的地方不止一个,所以这显然不够灵活,无法满足我的需求。

到目前为止,我的“最佳”想法是使用需要互联网来完成工作的方法填充数组,然后让 Reachability 在知道存在连接后执行该数组中的任何内容......但我是否过于复杂了这里?有没有更好的方法来解决这个问题?

4

1 回答 1

2

这大致基于您的“最佳想法”。Tony Million 的 Reachability 还会NSNotificationCenter在互联网连接发生变化时发布通知。当互联网连接可用时,您所有需要做某事的课程都应该注册此通知。

在 GitHub 页面上有一个示例:https ://github.com/tonymillion/Reachability#another-simple-example

您将在您的应用程序委托中初始化 Reachability 类,就像您现在所做的那样。然后您的其他类在其初始化程序中注册kReachabilityChangedNotification通知。NSNotificationCenter他们还必须从NSNotificationCenter他们的 dealloc 方法中注销。

以下是一些您可以用作起点的代码:

- (void)registerForReachabilityNotification
{
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(reachabilityChanged:)
                                                 name:kReachabilityChangedNotification
                                               object:nil];
}

- (void)deregisterFromNotifications
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

- (void)reachabilityChanged:(NSNotification *)notification
{
    Reachability *reachability = notification.object;
    switch ([reachability currentReachabilityStatus]) {
        case NotReachable:
            // No connection
            break;
        case ReachableViaWiFi:
        case ReachableViaWWAN:
            // Connection available
            break;
    }
}
于 2013-07-13T16:08:04.657 回答