UIApplicationWillEnterForegroundNotification вызывается все больше и больше - PullRequest
2 голосов
/ 13 февраля 2012

Я использую эту функцию в моих контроллерах представления, чтобы определить, если приложение снова активно, и обновить некоторые данные:

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

Это работает для обновления после активации, но каждый раз, когда приложение возвращается изфон на передний план (неактивно для активного) вызывает функцию еще раз.

Так что, если я закрою и открою приложение 4 раза, функция будет вызвана 4 раза!

РЕДАКТИРОВАТЬ : функция будет вызываться следующим образом:

  1. закрытие и открытие: функция вызывается 1 раз (именно так, как я хочу)
  2. закрытие и открытие: функция вызывается2 раза
  3. закрытие и открытие: функция вызывается 3 раза
  4. закрытие и открытие: функция вызывается 4 раза

Но ее нужно вызывать только 1 раз после полученияназад на переднем плане.В некоторых ситуациях приложение должно отображать предупреждение после активации и проверки данных.Это представление предупреждения будет отображаться 4 раза, когда функция будет вызываться 4 раза.

В делегате приложения эта функция ничего не делает, но упоминается.

Я использую Xcode 4.2 и iOS5!Я также использовал UIApplicationDidBecomeActive, но это также вызывает ту же проблему.

Ответы [ 4 ]

8 голосов
/ 13 февраля 2012

Я не знаю, когда вы добавляете себя в качестве наблюдателя, но каждый раз, когда приложение становится активным, вы, кажется, добавляете себя в качестве наблюдателя снова и снова.Таким образом, несколько вызовов.

Вы должны добавить свой контроллер представления только в качестве наблюдателя один раз.Попробуйте использовать контроллеры init: метод.И убедитесь, что вы удалили контроллер представления в качестве наблюдателя в dealloc: метод.

0 голосов
/ 10 мая 2016

Я думаю, вам следует удалить addObserver в методе viewWillDisappear.это работает для меня.

- (void)viewWillDisappear:(BOOL)animated
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}
0 голосов
/ 15 февраля 2012

Нет, я решил мою проблему.

Метод, который вызывается через наблюдателя, больше не будет вызывать viewDidLoad.поэтому viewDidLoad будет вызываться только один раз (при первом запуске приложения).

Функция getActive, которая будет вызываться через наблюдателя, теперь вызывает методы, которые были впервые вызваны из viewDidLoad.

Я также поместил функцию removeObserver в viewDidLoad, которая будет вызываться, только если пользователь полностью остановит приложение.

Спасибо за идеи и помощь!Теперь я знаю немного больше о создании многозадачного приложения.

0 голосов
/ 13 февраля 2012

Это то, что должно делать это уведомление.Если вам необходимо получить уведомление при запуске приложения, используйте applicationDidFinishLaunching.

...