2010-12-09 51 views
1

J'ai créé un panneau de paramètres pour mon application avec un curseur que vous pouvez définir sur "Effacer les préférences au prochain lancement" (dans l'application principale des paramètres de l'iPhone). Dans le délégué de mon application, j'ai fait en sorte que applicationWillEnterForeground vérifie si le commutateur de réglage a été défini dans les préférences et efface mes paramètres avec: [NSUserDefaults standardUserDefaults] setPersistentDomain:[NSDictionary dictionary] forName:[[NSBundle mainBundle] bundleIdentifier]]; si nécessaire. Ma question est: Si viewDidLoad et viewDidAppear dans mon vue contrôleur ne fonctionne pas après avoir fait les changements de paramètres en raison de la rapide app de commutation iOS 4 (la vue est toujours chargée lorsque je reviens de l'application de paramètres), comment puis-je signaler à ces contrôleurs de vue que les paramètres ont été réinitialisés afin qu'ils puissent recharger toutes leurs données? Si seulement il y avait un moyen d'appeler [MainViewController initData] du délégué mais malheureusement, cela ne peut pas être fait. Il semble que, sauf si une action se produit dans le contrôleur de vue, il n'y a aucun moyen de savoir si les paramètres ont été réinitialisés.Meilleure façon de réinitialiser les paramètres d'application dans iOS4 avec commutation rapide des applications

Toute aide serait grandement appréciée.

Répondre

1

Les notifications sont souvent le meilleur moyen de communiquer entre les contrôleurs et autres. Commencez par séparer le code d'initialisation en une méthode dans votre contrôleur de vue appelé par votre viewDidLoad/viewWillAppear. Par souci de référence, nous l'appellerons resetUser.

Ensuite, créez une notification qui se déclenche à partir de applicationWillEnterForeground lorsqu'il voit que ce commutateur a été lancé. Appelons-le userRequestsReset.

[[NSNotificationCenter defaultCenter] postNotificationName:@"userRequestsReset" 
                                                    object:nil]; 

Enfin, dans votre viewController écouter la notification de userRequestsReset et appeler la méthode resetUser lorsque la notification est reçue.

Dans votre viewDidLoad de viewController:

[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(resetNoticeReceived:) 
                                             name:@"userRequestsReset" 
                                           object:nil]; 

La méthode dans votre viewController qui répond à la notification:

- (void) resetNoticeReceived:(NSNotification *)notif { 
    [self resetUser]; 
} 

et retrait de la viewController en qualité d'observateur viewDidUnload:

[[NSNotificationCenter defaultCenter] removeObserver:self]; 
+0

Merci beaucoup pour votre réponse, Matthew. Je vais voir si je peux mettre en œuvre ceci maintenant et vous le faire savoir (désolé si je suis encore un peu novice). – Jackson

+0

Pas de soucis, il semble avancé mais c'est assez simple une fois que vous l'essayez. –

+0

Cela a fonctionné parfaitement! Merci beaucoup! Vos instructions étaient très claires et très faciles à suivre. J'ai trouvé l'idée du NSNotificationCenter un peu intimidante au début mais maintenant cela semble très simple. Merci encore! – Jackson