互联网连接可用后做某事的最佳方法
Posted
技术标签:
【中文标题】互联网连接可用后做某事的最佳方法【英文标题】:Best approach to doing something once an Internet connection becomes available 【发布时间】:2013-07-13 15:29:48 【问题描述】:我在这里看到了很多关于如何检查互联网连接可用的示例,但似乎没有人解释做某事的最佳实践方式/如果它可用。
我正在使用 Tony Million 的 Reachability 类,并且有一个“可用连接”块,一旦连接可用,它就会将布尔值(在线)设置为 true。 Reachability 类在我的应用程序委托 didFinishLaunchingWithOptions 中初始化,但是当我的代码检查 Online Reachability 的状态时,仍然没有完成确定是否存在连接,因此我的应用程序在首次启动时始终认为自己处于脱机状态。
现在,我可以将需要连接的代码放入“可用连接”块中,但我的应用需要连接互联网的地方不止一个,因此这显然不够灵活,无法满足我的需求。
到目前为止,我的“最佳”想法是使用需要 Internet 来完成工作的方法填充数组,然后让 Reachability 在知道有连接后执行该数组中的任何内容...但是我结束了-这里的问题复杂化了?有没有更好的方法来解决这个问题?
【问题讨论】:
【参考方案1】:这大致基于您的“最佳想法”。当互联网连接发生变化时,Tony Million 的 Reachability 还会通过NSNotificationCenter
发布通知。当互联网连接可用时,所有需要做某事的班级都应该注册此通知。
在 GitHub 页面上有一个例子:https://github.com/tonymillion/Reachability#another-simple-example
您将在您的应用委托中初始化 Reachability 类,就像您现在所做的那样。然后您的其他类在其初始化程序中使用NSNotificationCenter
注册kReachabilityChangedNotification
通知。他们还必须在他们的 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;
【讨论】:
很好-感谢您的建议。所以,大概,如果方法 X 需要做一些互联网性的事情,我会在我的 viewdidload 中注册它,然后在方法 X 的末尾我让它自己注销? 这取决于...如果您只需要做一次互联网的事情,您应该在互联网请求成功后取消注册。但是,如果您需要在连接更改时执行某些操作,则不应取消注册。以上是关于互联网连接可用后做某事的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章