UIApplicationWillEnterForegroundNotification被越来越多地调用

时间:2012-02-13 14:00:07

标签: iphone xcode nsnotificationcenter

我在视图控制器中使用此功能来识别应用程序是否再次处于活动状态并刷新一些数据:

[[NSNotificationCenter defaultCenter]
            addObserver:self
               selector:@selector(becomeActive:)
                   name:UIApplicationWillEnterForegroundNotification
                 object:nil];

这可以在激活后进行刷新,但每次应用程序从后台返回到前台(非活动状态)都会再次调用该函数。

因此,如果我关闭并打开应用程序4次,该函数将被调用4次!

编辑:该函数将以这种方式调用:

  1. 关闭并打开:1次调用的函数(这就是我想要的方式)
  2. 关闭并打开:函数调用2次
  3. 关闭并打开:函数调用3次
  4. 关闭并打开:函数调用4次
  5. 但它只需要在返回前景后被调用一次。在某些情况下,应用程序必须在激活并检查数据后显示警报视图。当该功能被调用4次时,该警报视图将显示4次。

    在app delegate中,这个函数什么都不做,但是提到了。

    我正在使用Xcode 4.2和iOS 5!我也使用了UIApplicationDidBecomeActive,但它也会导致同样的问题。

4 个答案:

答案 0 :(得分:8)

我不知道你何时将自己作为观察者加入,但每当应用程序变为活动状态时,你似乎一次又一次地将自我添加为观察者。因此多次调用。

您只能将视图控制器添加为观察者一次。尝试使用控制器init:方法。并且,确保在dealloc:方法中删除视图控制器作为观察者。

答案 1 :(得分:0)

这实际上就是这个通知应该做的事情。如果您需要在应用程序启动时收到通知,请使用applicationDidFinishLaunching。

答案 2 :(得分:0)

不,我解决了我的问题。

通过观察者调用的方法将不再调用viewDidLoad。所以viewDidLoad只会调用一次(在第一次启动应用程序时)。

将通过观察者调用的函数getActive现在调用首先从viewDidLoad调用的方法。

如果用户完全停止应用,我还会将removeObserver函数放到viewDidLoad,只会被调用。

感谢您的想法和帮助!现在我对制作多任务应用程序有了更多了解。

答案 3 :(得分:0)

我认为您应该在viewWillDisappear方法中删除addObserver。它对我有用。

- (void)viewWillDisappear:(BOOL)animated
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}