Мой метод делегирования приложения applicationDidBecomeActive:
получает вызов дважды при первом запуске приложения. У меня есть часть кода, которую я хочу выполнить только один раз и что я ввел в applicationDidBecomeActive:
Что мне делать?
Мой метод делегирования приложения applicationDidBecomeActive:
получает вызов дважды при первом запуске приложения. У меня есть часть кода, которую я хочу выполнить только один раз и что я ввел в applicationDidBecomeActive:
Что мне делать?
У меня проблема. Я использую службы местоположения. При первом запуске после того, как я нажимаю "OK" в предупреждении службы местоположения, мое приложение ApplicationDidBecomeActive вызывается еще раз, что является обычным поведением iOS.
Это происходит из-за оповещения о местоположении или push-уведомлении.
После того, как собственное уведомление о местоположении /push было отклонено, вызывается applicationDidBecomeActive.
Если вы хотите вызвать свой код только один раз, когда приложение станет активным, попробуйте называть его двумя способами. 1. didFinishLaunchingWithOptions 2. applicationWillEnterForeground
вместо вызова его только из applicationDidBecomeActive.
С Xcode 6 возникает новая причина: при запуске приложения в resizable simulator приложениеDidBecomeActive: будет вызываться дважды. Он запускает приложение с классом размера по умолчанию, а затем применяет использованный вами размер, даже если вы использовали настройки по умолчанию. Каждый раз, когда применяется изменение класса размера, вызывается 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:
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.
Возможно, вы создали экземпляр своего класса в Interface Builder и в вашем коде AppDelegate, возможно?
Если у вас есть код, который вы хотите вызывать только один раз, когда приложение запускается, используйте
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
вместо.
В противном случае applicationDidBecomeActive будет вызываться всякий раз, когда ваше приложение снова станет активным, поэтому это не означает в два раза больше, чем в вашем случае, но каждый раз, когда пользователь переключается обратно в ваше приложение после переключения на другое.
Как насчет:
Когда приложение запускает первое время он вызывает последовательно,
didFinishLaunchingWithOptions
applicationDidBecomeActive
(Дважды)Когда мы открываем Центр управления, он вызывает только
applicationDidBecomeActive
Когда приложение переходит из фона на передний план, он последовательно вызывает
applicationWillEnterForeground
applicationDidBecomeActive