Je suis habitué à coder des interfaces Java Swing, et dans celles si vous avez des propriétés qui changent, et vous voulez que votre interface soit mise à jour, vous mettrait en œuvre le modèle observateur/observable. En Java, vous le faites normalement en demandant à votre classe de conserver une liste d'écouteurs qu'elle notifie de différents événements.Quelle est la meilleure façon de faire observateur/observable en objectif-c (version iphone)
J'ai joué avec Objective-C sur Mac, et cela a KVC et la liaison qui semble fonctionner très bien, et nécessite moins de code. Le SDK iPhone ne semble pas avoir cette fonctionnalité, donc ma question est: Si j'ai une classe qui contient des données qui changent, quelle est la meilleure façon pour moi d'enregistrer un composant d'interface utilisateur avec cette classe afin qu'il puisse être notifié des changements dans les données qu'il doit afficher?
Bonne réponse - mais avec l'approche KVO, comment supprimer un observateur qui s'est enregistré avec de nombreux objets? J'ai pensé (à tort) que le KVO utilisait les notifications sous le capot - mais je ne le pense pas. Ainsi, après avoir utilisé addObserver: X forKeyPath: ..., si vous essayez de faire plus tard: [[NSNotificationCenter defaultCenter] removeObserver: X] cela ne fonctionne pas? Cela semble impliquer que vous devez garder une liste séparée de tous les objets que X observe afin que vous puissiez supprimer l'observation. Ou ai-je oublié quelque chose? – TimM
@TimM: Vous appelez la méthode appropriée pour l'objet observé. Par exemple: '[self removeObserver: theObserver forKeyPath: @" someProperty "];' – FreeAsInBeer
Nouveau dans OS X 10.7 Lion et iOS 5.0, il existe une méthode -removeObserver: forKeyPath: context: à laquelle vous pouvez passer le même contexte que vous avez passé ajouter l'observateur. Vous devriez le faire autant que possible, dans le cas où plusieurs objets observent le même chemin clé. –