我在这里看到了很多关于如何检查互联网连接的例子,但似乎没有人解释做某事的最佳实践方式/如果它可用。
我正在使用Tony Million的Reachability类,并且有一个“连接可用”块,一旦连接可用,就会将布尔值(Online)设置为true。 Reachability类在我的app delegate didFinishLaunchingWithOptions中初始化,但是当我的代码检查Online Reachability的状态时,仍然没有完成确定是否存在连接,因此我的应用程序在第一次启动时始终认为自己处于脱机状态。 / p>
现在,我可以将需要连接的代码放入“可用连接”块中,但我的应用程序需要互联网的位置不止一个,因此显然不够灵活,无法满足我的需求。
到目前为止,我所拥有的“最佳”想法是使用需要互联网来执行其操作的方法来填充数组,然后一旦知道存在连接就让Reachability执行该数组中的任何内容......但是我结束了这里有问题吗?有没有更好的方法来解决这个问题?
答案 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;
}
}