1

Je commencé à lire ce livre: http://www.amazon.com/Cocoa-Design-Patterns-Erik-Buck/dp/0321535022MVC - Interface Cocoa - modèle de conception de cacao livre

Le chapitre 2 explique sur le modèle de conception MVC et donne et par exemple que je besoin d'éclaircissements.

L'exemple simple montre une vue avec les champs suivants: hourlyRate, WorkHours, Standarthours, salary.

L'exemple est divisé en 3 parties: Affichage - contient des champs de texte et un tableau (le tableau contient une liste des données des employés).

Controller - composé de la classe NSArrayController (contient un tableau de MyEmployee)

Modèle - classe MyEmployee qui décrit un employé. La classe MyEmployee a une méthode qui renvoie le salaire selon la logique de calcul, et les attributs conformément aux contrôles de l'interface utilisateur. MyEmployee hérite de NSManagedObject.

Peu de choses que je ne suis pas sûr: 1. A l'intérieur du fichier implemenation de classe MyEmplpyee, la méthode de calcul obtient les attributs de classe en utilisant phrase comme « [[self valueForKey: @ » Salaire horaire « ] floatValue]; » Cependant, à l'intérieur de l'en-tête, il n'y a aucun membre de données nommé hourlyRate ou l'un des champs d'affichage.

Je ne sais pas exactement comment cela fonctionne, et comment il obtient la valeur du bon champ de vue. (doit-il être le même nom que le nom du champ dans la vue). peut-être que la connexion est faite en utilisant le constructeur de l'interface et n'a pas été montré dans le livre?

et plus important: 2. comment sépare-t-il la vue du modèle? disons, comme le livre implique pourrait arriver, je décide un jour de supprimer l'un des champs dans la vue. autant que je comprends, cela signifie changer la façon dont la méthode de salaire fonctionne dans MyEmplpyee (parce que nous avons un champ de moins), et en supprimant un attribut de la même Calss. Alors, comment cela sépare-t-il la vue du modèle si l'on change un reflet de l'autre?

Je suppose que je reçois quelque chose de mal ... Des commentaires? Merci

Répondre

0
  1. La mise en œuvre de la méthode valueForKey: est discutée here. Notez que valueForKey: peut réellement accéder aux ivars directement sans appeler aucune méthode.

  2. Si vous supprimez une colonne de votre NSTableView, vous n'avez pas besoin de la supprimer de votre classe d'objets de modèle. Il est toujours là, il ne s'affiche tout simplement pas.

+0

Hey, En ce qui concerne 2: Mais si je retire un champ, cela signifie qu'il n'y a pas de données pour ce champ plus ... donc si l'intérieur de la méthode de de modèle de classe, je me réfère à cet attribut en utilisant valueForKey, je obtenir une variable vide ou un autre résultat indéfini. Alors? comment résoudre ce problème? – Idan

+0

Si vous supprimez une colonne/un champ d'une vue de table, les données sont toujours dans votre objet de modèle de données ... la vue de la table est uniquement destinée à être affichée. Pensez-y comme un serveur "sans tête". Vous avez des pages Web Mac Mini. Que se passe-t-il lorsque vous retirez le moniteur?Rien de spécial, vous ne pouvez pas * voir * ce qui se passe. Supprimez une colonne de table et le modèle de données reste tel quel. Vous ne pouvez pas le voir. –

+1

Je devrais ajouter que tout ceci suppose que vous supprimez ce champ de table au stade de la conception. Peut-être que vous demandez vraiment de donner à l'utilisateur une fonctionnalité par laquelle ils sélectionnent un élément dans une vue de tableau et cliquez sur "supprimer" ou quelque chose. (comme la suppression d'un contact du carnet d'adresses). C'est ici que vous récupérerez probablement cet ordre de suppression de la vue de la table et le passerez à votre backend de base de données, et lui direz de supprimer l'objet associé de la base de données. –