一旦互联网连接可用,最好的办法

时间:2013-07-13 15:29:48

标签: ios reachability

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

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

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

到目前为止,我所拥有的“最佳”想法是使用需要互联网来执行其操作的方法来填充数组,然后一旦知道存在连接就让Reachability执行该数组中的任何内容......但是我结束了这里有问题吗?有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:2)

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

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

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

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

- (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;
    }
}