ApplicationDidBecomeActive получает вызов дважды - программирование
Подтвердить что ты не робот

ApplicationDidBecomeActive получает вызов дважды

Мой метод делегирования приложения applicationDidBecomeActive: получает вызов дважды при первом запуске приложения. У меня есть часть кода, которую я хочу выполнить только один раз и что я ввел в applicationDidBecomeActive:

Что мне делать?

4b9b3361

Ответ 1

У меня проблема. Я использую службы местоположения. При первом запуске после того, как я нажимаю "OK" в предупреждении службы местоположения, мое приложение ApplicationDidBecomeActive вызывается еще раз, что является обычным поведением iOS.

Ответ 2

Это происходит из-за оповещения о местоположении или push-уведомлении.

После того, как собственное уведомление о местоположении /push было отклонено, вызывается applicationDidBecomeActive.

Ответ 3

Если вы хотите вызвать свой код только один раз, когда приложение станет активным, попробуйте называть его двумя способами. 1. didFinishLaunchingWithOptions 2. applicationWillEnterForeground

вместо вызова его только из applicationDidBecomeActive.

Ответ 4

С Xcode 6 возникает новая причина: при запуске приложения в resizable simulator приложениеDidBecomeActive: будет вызываться дважды. Он запускает приложение с классом размера по умолчанию, а затем применяет использованный вами размер, даже если вы использовали настройки по умолчанию. Каждый раз, когда применяется изменение класса размера, вызывается applicationDidBecomeActive:

Ответ 5

Я не знаю, поможет ли это, но у меня была такая же проблема с совершенно простым приложением, которое не использует службы геолокации, и я обнаружил, что это иллюзия. Посмотрите сообщения, которые я получил:

2012-12-22 10:47:45.329 Bizarro[10416:907] start applicationDidBecomeActive:
2012-12-22 10:47:45.333 Bizarro[10416:907] end applicationDidBecomeActive:
2012-12-22 10:47:45.329 Bizarro[10416:907] start applicationDidBecomeActive:
2012-12-22 10:47:45.333 Bizarro[10416:907] end applicationDidBecomeActive:

Посмотрите внимательно. Посмотрите на время. Первое и третье сообщения имеют одно и то же время. Второе и четвертое сообщения имеют одно и то же время. Это те же самые сообщения! Это ошибка Xcode; это не имеет никакого отношения к моему коду. Xcode сообщает те же сообщения журнала дважды.

В моем случае я смог предотвратить это, отключив все Behaviors для Running → Generate Output.

Ответ 6

Возможно, вы создали экземпляр своего класса в Interface Builder и в вашем коде AppDelegate, возможно?

Ответ 7

Если у вас есть код, который вы хотите вызывать только один раз, когда приложение запускается, используйте

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

вместо.

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

Ответ 8

Как насчет:

  • Приращение на applicationDidBecomeActive
  • Уменьшение на событиях обратного вызова запросов разрешений или других предупреждений, которые запускают другое приложениеDidBecomeActive при закрытии.

Ответ 9

Когда приложение запускает первое время он вызывает последовательно,

  • didFinishLaunchingWithOptions
  • applicationDidBecomeActive (Дважды)

Когда мы открываем Центр управления, он вызывает только

applicationDidBecomeActive

Когда приложение переходит из фона на передний план, он последовательно вызывает

  • applicationWillEnterForeground
  • applicationDidBecomeActive