Settings.bundle et actualisation de l'application iOS, Problème de récupération de préférence à la réouverture d'u |
Bienvenue invité ( Connexion | Inscription )
Settings.bundle et actualisation de l'application iOS, Problème de récupération de préférence à la réouverture d'u |
7 Aug 2011, 03:50
Message
#1
|
|
Adepte de Macbidouille Groupe : Membres Messages : 192 Inscrit : 15 May 2005 Lieu : Buenos Aires - Argentina Membre no 39 263 |
Bonjour,
je suis en train d'essayer d'implémenter un settings.bundle pour une application iPad et iPhone. J'aimerais savoir s'il existe autre chose que les fonctions viewDidAppear ou viewDidLoad pour détecter la réouverture de l'app après en être sorti pour aller dans le tableau de préférences de System, et y revenir ensuite (à l'app). L'affichage dans une view n'est pas updaté après changement de la préférence d'affichage. Il faut alors que je change de view et que j'y revienne pour que le changement se fasse. J'ai mis la récupération de la préférence dans viewDidAppear et dans viewDidLoad, sans succès. Cordialement, Olivier -------------------- MacBook Air 13'', 8Go RAM, 256 Go / MacBook Pro, 8Go RAM, 500Go / MacMini Intel (2006), 2Go RAM, 500Go
|
|
|
7 Aug 2011, 10:00
Message
#2
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 486 Inscrit : 29 Aug 2002 Membre no 3 340 |
Je ne suis pas un spécialiste, mais j'ai cherché un peu, et il semble qu'il faille explicitement synchroniser tes NSUserDefaults lorsque l'application redevient active et ajouter:
Code [[NSUserDefaults standardUserDefaults] synchronize]; dans le applicationDidBecomeActive appelé par l'applicationDelegate chaque fois que le contrôleur de la vue est rechargé, après sa création.Au besoin, il faut explicitement enregistrer la classe qui rafraîchit la vue concernée par ce réglage en utilisant le NotificationCenter et en l'enregistrant comme observateur de applicationDidBecomeActive, de manière qu'elle puisse faire ce qu'elle a à faire. Je ne fais que synthétiser ce que je lis, ça ne vaut pas forcément pour parole d'évangile... J-P |
|
|
7 Aug 2011, 15:54
Message
#3
|
|
Adepte de Macbidouille Groupe : Membres Messages : 192 Inscrit : 15 May 2005 Lieu : Buenos Aires - Argentina Membre no 39 263 |
Merci pour ta réponse.
Dans le AppDelegate, j'ai testé Code - (void)applicationWillEnterForeground:(UIApplication *)application , en y collant un NSLog. Effectivement, ça passe par là. Mais le Code [[NSUserDefaults standardUserDefaults] synchronize]; que tu me proposes n'a aucun effet.Je vais m'atteler au Notification Center, voir si ça arrange mon problème. -------------------- MacBook Air 13'', 8Go RAM, 256 Go / MacBook Pro, 8Go RAM, 500Go / MacMini Intel (2006), 2Go RAM, 500Go
|
|
|
7 Aug 2011, 18:31
Message
#4
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 486 Inscrit : 29 Aug 2002 Membre no 3 340 |
Ignorer cette réponse. J'ai cafouillé avec Lion... j' suis pas complètement rodé avec le full screen...
Ce message a été modifié par Jaypee - 7 Aug 2011, 19:06. |
|
|
7 Aug 2011, 18:51
Message
#5
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 486 Inscrit : 29 Aug 2002 Membre no 3 340 |
Par précaution essaie quand même la méthode déléguée applicationDidBecomeActive, parce que cela peut concerner autre chose que la vue, et la manière d'enregistrer ta classe est :
Code [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(defaultsChanged:) name:NSUserDefaultsDidChangeNotification object:nil]; Ligne à ajouter dans l'init de ta classe (ou ta vue). Self représente l'instance de ta classe (ou ta vue).Il y a deux étapes : - Synchroniser les réglages, à faire même si la vue ne change pas, les NSUserDefaults sont remis-à-jour et cela devrait envoyer la notification defaultsChanged. - Réagir au changement de valeur et mettre à jour la vue si c'est nécessaire. Pour cela il faut être prévenu, donc s'abonner à la notification defaultsChanged. J'ai copié l'exemple de code, il manquait les : après le sélecteur de la méthode defaultsChanged. @+ J-P PS: Sur Twitter je te recommande @akosma, un développeur iOS argentin installé en Suisse. je l'ai connu par une video de présentation d'iOS faite sur le site InfoQ. Ce message a été modifié par Jaypee - 7 Aug 2011, 19:04. |
|
|
7 Aug 2011, 19:23
Message
#6
|
|
Adepte de Macbidouille Groupe : Membres Messages : 192 Inscrit : 15 May 2005 Lieu : Buenos Aires - Argentina Membre no 39 263 |
Salut Jaypee et vraiment merci pour ton aide.
Ça marche. J'envoie la notification depuis l'applicationWillEnterForeground, elle est reçue par le contrôleur de la vue. Dans un premier temps, je n'arrivais pas à voir de changement avec ce qui était fait auparavant. Chose changée dès que j'ai rajouté le Code [[NSUserDefaults standardUserDefaults] synchronize]; Donc merci encore. Mais je ne comprends pas ce qui dans ce cas change entre applicationDidBecomeActive et applicationWillEnterForeground. -------------------- MacBook Air 13'', 8Go RAM, 256 Go / MacBook Pro, 8Go RAM, 500Go / MacMini Intel (2006), 2Go RAM, 500Go
|
|
|
7 Aug 2011, 20:26
Message
#7
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 486 Inscrit : 29 Aug 2002 Membre no 3 340 |
Ce lien le montre clairement: http://www.cocoanetics.com/2010/07/underst...gate-messaging/ J-P Ce message a été modifié par Jaypee - 8 Aug 2011, 07:47. |
|
|
Nous sommes le : 24th April 2024 - 08:57 |