3

我正在开发一个 iOS 应用程序,当我有互联网连接时需要做一些事情,而当我没有互联网连接时需要做一些事情。如果我没有在某个时候,我会向用户显示一条消息,让我给我互联网并回来。问题是如何检测以下情况:

  • 用户按两次主页按钮,进入多任务,设置并连接到互联网
  • 用户返回我的应用程序的多任务处理,但没有按任何内容

我知道我会收到 AppDelegate 的回调:

- (void)applicationDidEnterBackground:(UIApplication *)application
- (void) applicationDidBecomeActive:(UIApplication *)application

但是代码(它不是由我启动的)非常大,如果有任何替代方案,我不想在那里处理 UIViewController 需要的东西。

我的 UIViewController 的 - (void)viewDidAppear:(BOOL)animated 当用户回来时它不会被调用。

截屏

断点肯定没有命中!

任何可用的想法,除了 AppDelegate 吗?

4

2 回答 2

7

applicationDidEnterBackground您可以使用通知中心在视图控制器中收听:

[[NSNotificationCenter defaultCenter] addObserver: self
                                      selector: @selector(handleEnteredBackground:) 
                                      name: UIApplicationDidEnterBackgroundNotification
                                      object: nil];

viewDidLoad. 同样对于applicationDidBecomeActive.

不要忘记将自己移除为viewDidUnload.

于 2012-09-04T15:45:44.753 回答
2

应用程序委托是处理应用程序状态更改的正确位置,但正因为如此,并不意味着您必须将应用程序状态更改触发的所有逻辑都放在那里。

把逻辑放在它所属的地方。如果是网络代码,它不在应用程序委托中,也不在视图控制器中,它在一个单独的类中。然后研究将应用程序的不同部分联系在一起的方法。在大多数情况下,通知、KVO 和共享实例模式都是不错的方法。

于 2012-09-04T15:45:54.020 回答