IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Settings.bundle et actualisation de l'application iOS, Problème de récupération de préférence à la réouverture d'u
Options
olivion
posté 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
Go to the top of the page
 
+Quote Post
Jaypee
posté 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

Go to the top of the page
 
+Quote Post
olivion
posté 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
Go to the top of the page
 
+Quote Post
Jaypee
posté 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.
Go to the top of the page
 
+Quote Post
Jaypee
posté 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.
Go to the top of the page
 
+Quote Post
olivion
posté 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



biggrin.gif Salut Jaypee et vraiment merci pour ton aide. biggrin.gif
Ç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
Go to the top of the page
 
+Quote Post
Jaypee
posté 7 Aug 2011, 20:26
Message #7


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 486
Inscrit : 29 Aug 2002
Membre no 3 340



Honnetement, je ne vois pas la différence.

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.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 24th April 2024 - 08:57