Нажав на представление о didReceiveRemoteNotification - PullRequest
0 голосов
/ 24 ноября 2010

Когда приложение iPhone работает в фоновом режиме и получает удаленное уведомление. Таким образом, он выполнит didReceiveRemoteNotification обратный вызов. В этом я собираюсь подтолкнуть к новому UIViewController. Но до этого он заметил, что он вызывает applicationWillEnterForeground callback.

В то же время я делаю обновление местоположения с помощью модального диалога. Поэтому, когда приходит это уведомление, происходит оба сценария и происходит сбой приложения. Так есть ли способ заблокировать обработку applictiaonWillEnterBackground при удаленном уведомлении. Поскольку момент немного сложный, потому что эта обработка выполняется после applicationWillEnterBackground контроллера.

Спасибо.

1 Ответ

3 голосов
/ 24 ноября 2010

Обратный вызов application:didReceiveRemoteNotification: должен вызываться только тогда, когда приложение работает на переднем плане. При работе в фоновом режиме вы должны вместо этого позвонить на application:didFinishLaunchingWithOptions:.

Поскольку вы задаете вопрос, а также используете местоположение ядра, возможно, что application:didReceiveRemoteNotification: вызывается, когда приложение находится в фоновом режиме, но я думаю, что это будет ошибкой. По крайней мере, согласно документации Apple.

В любом случае, НЕТ, вы не можете заблокировать applicationWillEnterForeground:. Не зная точно, что вы делаете в различных обратных вызовах, я бы порекомендовал вам установить флаг в applicationWillEnterForeground:, если вы делаете что-то там, а затем проверить этот флаг в application:didReceiveRemoteNotification:

- (void)applicationWillEnterForeground:(UIApplication *)application {
  if (somehingHappend) {
    somethingHappended = YES;
  }
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
  if (!somethingHappened) {
    // push your view controllers or whatever
  }
}

Где somethingHappened - это BOOL, определенный в том же классе, что и ивар.

...