2009-10-15 6 views
1

J'ai une application basée sur NavigationController dans laquelle le modèle de données est stocké dans appDelegate après avoir été récupéré à l'aide de CoreData. Les vues qui affichent les données ont toutes un pointeur vers appDelegate afin qu'elles puissent interroger le modèle pour les données requises. Ils appellent ensuite des méthodes dans appDelegate en réponse aux sélections de l'utilisateur.Utilisation d'iPhone NSNotifications dans l'application MVC

Ma question est, le motif MVC ne cache-t-il pas de façon optimale les données de la vue? Serait-il préférable que l'appDelegate (dans ce cas, servant de modèle et de contrôleur) fournisse les données à la vue et que la vue envoie simplement une notification lorsqu'il y a une entrée de l'utilisateur? Cela éliminerait le besoin pour l'affichage de maintenir un pointeur sur appDelegate.

Répondre

1

Vous avez raison de craindre que AppDelegate assume ce rôle. AppDelegate est un endroit facile à vider, et il devient rapidement débordé de rôles. Comme vous le constatez, il joue le modèle de données, le contrôleur de données et le délégué d'application. Si vous arrivez à AppDelegate en utilisant [[[UIApplication sharedApplication] delegate], c'est particulièrement un problème car il est très difficile de réutiliser la vue dans d'autres programmes. C'est moins un problème si votre vue a un delegate ivar qui pointe vers AppDelegate, mais pourrait facilement pointer vers un autre objet.

La vue doit souvent avoir un délégué auquel elle transmet les événements d'interface utilisateur. Voir UITextField et UITextFieldDelegate pour un bon exemple de modèle. Les vues ne publient généralement pas NSNotification pour ce genre de choses. Inversement, les classes de modèles fonctionnent généralement mieux sans les délégués dans mon expérience. Je suis un grand croyant en NSNotification. Mes programmes les utilisent pour presque toutes les données qui remontent de la couche du modèle. Mais pour les actions qui descendent de la couche vue, les appels de délégation et de méthode directe fonctionnent généralement mieux.

0

Ce n'est pas votre point de vue qui accède aux données. Le contrôleur doit être le lien entre les données et la vue. Si par vue vous voulez dire le contrôleur, alors c'est parfaitement bien et fondamentalement ce que MVC est tout.

+0

Vous avez raison ... Je voulais dire viewController. – Alpinista

Questions connexes