J'ai un viewController qui exécute ma vue de jeu. Le viewController génère des instances de points, qui sont sous-classées à partir de UIView et qui sont ajoutées en tant que sous-vues à la vue viewController. Dans la classe des points, j'ai un certain comportement si on les touche (touchesBegan) mais j'aimerais aussi toucher les points pour ajouter à la partition qui est une propriété du viewController, mais je ne vois aucun moyen de communiquer cela sans solutions de contournement ridicules. Qu'est-ce que j'oublie ici?Comment puis-je faire communiquer une classe à son contrôleur de vue?
Répondre
Deux options (mais pas les seules) sont NSNotificationCenter et delegate + protocol.
NSNotificationCenter est plus simple à mettre en œuvre et à utiliser mais n'est pas idéal dans tous les cas. Le viewController appelle addObserver pour indiquer qu'il est intéressé par un message. Les points appellent postNotificationName pour envoyer le message aux objets intéressés. Veillez à appeler removeObserver dans le dealloc de viewController.
Le protocole Delegate + vous permet de définir une interface plus rigide, bien définie, compilable ou à l'exécution vérifiable entre les objets. Pour plus de détails, voir Protocols dans le langage de programmation Objective-C.
Dans votre cas, je pense que la définition d'un protocole est la meilleure option. Le viewController ferait lui-même le délégué des objets points. Les objets points auront une propriété delegate et appellent les méthodes de protocole via la propriété delegate.
Pourquoi la partition est-elle une propriété de ViewController en premier lieu? Je peux voir une propriété pour l'étiquette qui affiche le score, mais la partition elle-même appartient à une sorte d'objet modèle. L'avantage de cette approche est que vous pouvez ensuite utiliser Key-Value Observing (KVO), en ajoutant votre ViewController en tant qu'observateur de l'objet modèle. En fait, c'est à peu près ce que KVO a été conçu pour: un moyen facile de notifier un nombre arbitraire d'observateurs à propos d'un changement de propriété.
Référence:
Key-Value Coding Protocol Reference
Key-Value Observing Protocol Reference
Model Object Implementation Guide