【问题标题】:UIViewController visible callbackUIViewController 可见回调
【发布时间】:2012-08-29 07:34:04
【问题描述】:

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

  • 用户按下 Home 键两次,进入多任务处理、设置并连接到互联网
  • 用户返回我的应用进行多任务处理,但没有按任何操作

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

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

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

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

确定没有命中的断点!

除了 AppDelegate 之外,还有什么可用的想法吗?

【问题讨论】:

    标签: objective-c ios ios5 uiviewcontroller ios4


    【解决方案1】:

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

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

    viewDidLoad 中执行此操作。 applicationDidBecomeActive 也是如此。

    别忘了在viewDidUnload 中移除自己的观察者身份。

    【讨论】:

    • +1 可能也会被接受,虽然视图控制器中有很多通知,但我真的不想碰 AppdDlegate。
    • 它运行良好,完全符合我的需要。值得我投 10 票,非常感谢
    • 您必须在dealloc 中删除自己的观察者身份。不能保证viewDidUnload 会被调用。你可以在这两个函数中做到这一点。
    【解决方案2】:

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

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

    【讨论】:

    • 努力+1,但没有帮助。我告诉过代码非常大,很难在这里移动任何东西,大量的内存泄漏等等。重写超过6个月,不想1周再调试1次。
    猜你喜欢
    • 2014-08-10
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 2011-09-30
    • 2015-10-11
    • 2014-03-02
    相关资源
    最近更新 更多