2010-08-26 8 views
0

Je fais le code de miantainance d'état pour Iphone os 4.0 en utilisant la classe NSUserDefault. quand je clique sur la maison, puis cliquez sur l'application puis cela fonctionne, mais quand je clique sur la maison, puis appuyez sur le bouton Construire et Exécuter cela ne fonctionne pas pourquoi est-ce le cas?Une question liée à la classe NSUserDefault

Répondre

2

Lorsque vous appuyez sur le bouton d'accueil sur iOS 4, l'application n'est pas arrêtée. Il est suspendu et mis dans un état de fond. L'état de l'interface utilisateur de votre application est automatiquement géré à ce stade. Lorsque vous cliquez sur build an go, l'application est arrêtée de force avant d'être exécutée à nouveau à partir de Xcode.

Je suppose que votre code pour enregistrer l'état de l'interface utilisateur est dans la méthode applicationWillTerminate. Si tel est le cas, votre code ne sera jamais exécuté sur iOS 4, car cette méthode n'est plus appelée (du moins c'est ce que j'ai vu de mes propres tests et des expériences d'autres personnes). Et dans le cas où une application est forcée de quitter (c'est-à-dire, par Xcode lors de la compilation et de l'exécution), la méthode applicationWillTerminate est ignorée.

Vous devez plutôt implémenter les méthodes applicationDidEnterBackground et applicationWillEnterForeground. De cette façon, à chaque fois que l'application est en arrière-plan, elle écrira son état au NSUserDefaults, en s'assurant que l'état est enregistré avant que l'application ne quitte.

Sur iOS 4, la seule façon de quitter complètement une application est d'utiliser l'interface utilisateur multitâche (en appuyant deux fois sur le bouton d'accueil), ce qui entraîne la fermeture forcée des applications. C'est pourquoi il est important d'implémenter les méthodes d'arrière-plan ci-dessus, car elles seront beaucoup plus susceptibles d'être exécutées.

En dernière remarque, il peut être utile d'appeler synchronize sur l'instance NSUserDefaults juste après avoir écrit votre état d'interface utilisateur, juste pour vous assurer que les valeurs par défaut sont écrites sur le disque à ce moment-là.

+0

Il y a également un appel à willresignactive (nom de recherche) qui est appelé lorsque le bouton Accueil est touché. – Jordan

+0

Oui, 'applicationWillResignActive' et' applicationDidBecomeActive'. Ces méthodes sont également appelées lorsque le système interrompt l'application avec une alerte, les commandes multitâches, un appel entrant, etc. Merci d'avoir apporté ça à Jordan. – Jasarien

+0

+1 Pour une réponse complète. Mérite plus. – Abizern

Questions connexes