2010-11-24 4 views
0

Lorsque l'application iPhone fonctionne en arrière-plan et reçoit une notification à distance. Il va donc exécuter le rappel didReceiveRemoteNotification. Dans ce que je vais pousser à un nouveau UIViewController. Mais avant cela, il a remarqué qu'il appelait le rappel applicationWillEnterForeground.Passer à une vue sur didReceiveRemoteNotification

Dans ce que je fais également une mise à jour de l'emplacement en utilisant une boîte de dialogue modale. Ainsi, lorsque cette notification arrive, les deux scénarios se produisent et l'application se bloque. Il est donc possible de bloquer le traitement applictiaonWillEnterBackground sur la notification à distance. Comme le moment est un peu difficile car ce traitement est fait après le contrôleur applicationWillEnterBackground.

Merci.

Répondre

3

Le rappel application:didReceiveRemoteNotification: ne doit être appelé que lorsque l'application s'exécute au premier plan. En cours d'exécution en arrière-plan, vous devriez plutôt appeler application:didFinishLaunchingWithOptions:. Puisque vous posez la question et que vous utilisez également l'emplacement de base, il se peut que application:didReceiveRemoteNotification: soit appelée lorsque l'application est en arrière-plan, mais je pense que ce serait un bug. Au moins selon la documentation d'Apple.

Quoi qu'il en soit, NON, vous ne pouvez pas bloquer applicationWillEnterForeground:. Sans savoir exactement ce que vous faites dans les différents callbacks Je recommande que vous définissez un drapeau dans applicationWillEnterForeground: si vous faites quelque chose et vérifier que le drapeau dans 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 est un BOOL défini dans la même classe qu'un ivar.

+0

Merci pour votre réponse Robert. En fait, ce qui se passe quand une notification push est reçue, un message d'alerte est affiché. Lorsque je clique sur le bouton d'affichage du message d'alerte, il déclenche applicationWillEnterForeground après que didReceiveRemoteNotification. Donc, si c'était comme ailleurs, j'aurais utilisé le drapeau booléen. Cependant, si son exécution en arrière-plan appellera le didFinishLaunchingWithOptions lors du cliquage sur le bouton d'affichage? – Dilshan

+1

Oui, c'est ce qui devrait arriver. Je l'ai seulement essayé avec les notifications locales moi-même mais 'application: didReceiveRemoteNotification:' devrait, selon les documents, seulement être appelé si l'application est au premier plan. –

+0

Oui, cela arrive parce que l'application fonctionne en mode multitâche. DoneReceiveRemoteNotification sera appelé. – Dilshan

Questions connexes