2010-02-05 5 views
0

J'ai actuellement un puits de couleur qui garde une couleur enregistrée dans le NSUserDefaults. Il est lié à un NSUserDefaultsController. Cependant, je veux également écouter les changements de couleur afin que je puisse mettre à jour mes points de vue en conséquence. Par conséquent, en plus de la liaison, j'ai ajouté une cible/action à la couleur bien à mon contrôleur de préférences qui affiche une notification avec la couleur.Liaisons ET cible/action?

1) Quel est le niveau de sécurité de la cible/action et des liaisons? Y a-t-il une possibilité de décalage ou de désynchronisation et de déclaration de valeurs différentes?

2) Lorsque j'obtiens la couleur dans ma méthode IBAction, devrais-je l'obtenir à partir des valeurs par défaut de l'utilisateur ou de la couleur?

Voici mon colorChanged: l'action:

- (IBAction)colorChanged:(id)sender 
{ 
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[colorWell color] forKey:@"color"]; 
[notificationCenter postNotificationName:@"ColorChangedNotification" object:self userInfo:userInfo]; 
} 

Alors dois-je faire ceci:

[NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@"color"]]; 

ou:

[colorWell color]; 

Merci!

+0

Comment obtenez-vous l'action colorChanged ??? Je ne suis pas en mesure d'obtenir des actions pour mes éléments dans TableViewCell – sheetal

Répondre

3

1) Quel est le niveau de sécurité d'avoir les cibles/actions et les liaisons? Y a-t-il une possibilité que l'on pourrait être en retard ou ils peuvent être désynchronisés et signaler différentes valeurs?

Je pense que pour la plupart, cela devrait être OK. La meilleure façon de le dire est de le tester.

2) Lorsque j'obtiens la couleur dans ma méthode IBAction, est-ce que je devrais l'obtenir à partir des valeurs par défaut de l'utilisateur ou de la couleur?

Vous devriez certainement, certainement obtenir directement de la couleur bien. Pourquoi? Il peut y avoir un décalage lors de l'enregistrement aux valeurs par défaut de l'utilisateur. Heck, les valeurs par défaut pourraient même enregistrer juste une fois juste avant que l'application se termine, et il serait toujours bien. (OK, ce n'est pas tout à fait vrai, mais tout de même) Le but principal des valeurs par défaut est de conserver les données entre les lancements d'applications, pas pendant la durée de vie de l'application.

1

Il est sûr d'avoir à la fois une cible/action et des liaisons. Si vous publiez des notifications avec un NSNotificationCenter, les notifications sont envoyées de manière synchrone aux observateurs. (Avec la mise en garde évidente que ce n'est pas magique - si l'observateur A envoie un message à l'observateur B lorsqu'il reçoit la notification, l'observateur B n'aura pas encore reçu la notification.

La lecture de la couleur directement à partir du puits de couleur est rapide, et probablement parfaite à partir d'une IBAction. Si vous exécutez du code au démarrage de l'application, il est préférable de lire les valeurs par défaut de l'utilisateur, car les liaisons du puits de couleur n'ont peut-être pas encore été mises à jour.