2010-07-21 9 views
3

Dans iOS 4, si je ferme & Rouvrir mon application rapide puis (après applicationWillResignActive invocation) il y a une chance pour applicationWillEnterForeground à obtenir appelé bien avant le applicationDidEnterBackground et les résultats en un écran vide noir comme parce que l'application est entrée en arrière-plan immédiatement après l'état de premier plan.En iOS4 applicationWillEnterForeground peut obtenir appelé avant applicationDidEnterBackground et il fait problème

c'est l'ordre qu'il a été imprimé dans la console:

* 1. applicationWillResignActive
2. applicationDidEnterBackground
3. applicationWillEnterForeground
4. applicationDidBecomeActive
1. applicationWillResignActive
3. applicationWillEnterForeground
2. applicationDidEnterBackground *

Comment gérer ce scénario? et pour vous assurer que les méthodes de délégué d'application sont exécutées dans le bon ordre?

Merci d'avance.

+3

Étape 1: FICHIER UN BUG! On dirait que c'est un vrai problème; ça devrait être réparé! – jtbandes

Répondre

0

Cela m'arrive également.

Seulement dans mon cas, il arrive parfois que mon application reçoive une notification locale.

1

Conservez un compteur pour les commutateurs et ignorez les commutateurs qui se produisent dans le mauvais ordre. Quelque chose comme ceci:

-(void) handleSwitchToBackground { 
    if (myState == 0) { /* do background stuff */ } 
    myState += 1; 
} 

-(void) handleSwitchToForeground { 
    myState -= 1; 
    if (myState == 0) { /* do foreground stuff */ } 
} 

Si le premier plan se produit avant le fond, aucune méthode ne fait quoi que ce soit.

+0

Merci, mais je ne pense pas que cela permettrait d'éviter le problème de l'écran noir parce que l'application est entrée en arrière-plan immédiatement après l'état de premier plan. Et cette transition d'état est entièrement sous le contrôle du SDK ou du système d'exploitation, lorsque l'utilisateur appuie sur le bouton d'accueil ou l'icône de l'application. – SuperGodSachin