La façon de traiter avec des classes de modèle dans une application iOS
Je suis un newbie dans le développement de l'application iOS, mais je suis en train d'apprendre à faire face avec le Cacao de la meilleure façon.
Je suis coincé à essayer de comprendre comment garder la référence et le modèle correctement les objets.
- beaucoup disent d'écrire un délégué d'application de la propriété de maintenir le modèle et de référence à travers les méthodes pratiques pour l'application délégué singleton.
- d'autres disent à "injecter" dans la vue de contrôleur de la partie du modèle dont elle a besoin (ou de ses sous-vues besoins), mais je ne comprends pas comment faire cela. Au travers d'une propriété? Par le biais d'un initWithModel: méthode (et dans ce cas, comment puis-je dire de l'IB à utiliser cette méthode?)
- d'autres encore disent que le modèle devrait être un singleton
- et encore, d'autres disent d'utiliser des variables globales (!)
Pourriez-vous me donner quelques conseils (et des exemples de code)? Je voudrais apprendre les choses de la bonne manière, en considérant que dès que je vais déménager vers la Base de Données.
- double possible de Où placer la "Base de Données de la Pile" en Cocoa/Cacao application Touch
- Alors que vous n'êtes pas encore traiter avec Base de Données, les réponses à la question de discuter les diverses solutions que vous avez pour le placement d'un modèle de données dans votre application, de sorte qu'ils devraient s'appliquer ici.
- Merci Brad, suite à vos suggestions, j'ai trouvé une bonne solution. Je vais poster plus vite possible parce que la réponse à ma question.
Vous devez vous connecter pour publier un commentaire.
Résumé: j'ai lu attentivement le sujet Où placer la "Base de Données de la Pile" en Cocoa/Cacao application Tactile suggéré par Brad Larson et j'ai écrit une possible solution sur la façon de traiter avec un modèle et de vue différents contrôleurs. La solution n'utilise pas de Base de Données, mais je crois que le même modèle peut être appliqué à la Base de Données des applications.
Scénario: considérons une application simple qui stocke des informations sur les produits, telles que le nom, la description et le prix/unité. Une fois lancée, l'application affiche une liste de produits (avec une UITableView); lorsque l'utilisateur appuie sur un nom de produit, l'application présente les détails des produits dans un autre point de vue, la mise à jour de la barre de navigation avec le nom du produit.
Architecture Le modèle est assez simple ici: un tableau d'objets de Produit, chacune avec un nom, une description et un prix de la propriété.
L'application a obtenu trois principaux points de vue, la plupart du temps créé par la Navigation modèle de Xcode: un UINavigationView (géré par l'UINavigationController, instancié dans l'application de son délégué), la valeur par défaut UITableView (géré par RootViewController et qui est le premier point de vue illustré par la UINavigationController) et une fenêtre detravail (géré par l'DetailViewController la classe, nous avons à écrire).
Voyons ce qui est le gros plan à partir du modèle de point de vue:
Voici quelques extraits de code:
Création de la maquette:
La RootViewController pouvez recevoir le modèle de référence, car il a un NSMutableArray propriété:
Lorsque l'utilisateur appuie sur un nom de produit, le RootViewController instancie une nouvelle DetailViewController et passe la référence du produit à l'aide d'un immeuble à nouveau.
Et, à la fin, le DetailViewController montre le modèle d'information de l'établissement de ses points de vente dans la méthode viewDidLoad.
Vous pouvez télécharger le projet complet ici: http://dl.dropbox.com/u/1232650/linked/stackoverflow/SimpleModel.zip
Je vais vraiment apprécier tout commentaire de ma solution, je suis désireux d'apprendre 😉
Collègues plus expérimentés recommandent d'avoir des biens en AppDelegate.
OMI, il est préférable d'utiliser ensemble spécifique de modèles de contrôleur spécifique.
Je suis un noob aussi, mais voici ce que j'ai fait. C'est plus comme #2.
Dans applicationDidFinishLaunching, le délégué d'application crée une instance du modèle.
Mon point de vue, les contrôleurs de déclarer une propriété pointant sur le modèle, mais le type est un protocole (dans mon cas
id <GameModel>
. De nombreuses propriétés dans le protocole sont déclarées en readonly.Dans applicationDidFinishLaunching, le délégué d'application définit la propriété à point pour le modèle qu'il a créé.
Ce que je n'aime pas:
Un. Votre point de vue contrôleurs ne devriez pas avoir à connaître la structure de votre application délégué. Vous pouvez réutiliser le même point de vue contrôleur dans une autre application, avec une application différente type de délégué. Vous pourriez faire de simples changements à votre vue-contrôleur de code pour corriger ça, ou il y a d'autres façons de contourner cela, mais pourquoi faire compliqué?
Trois. Je ne suis pas friand de singletons comme la plupart des gens. Le problème, c'est qu'ils sont simple. Que faire si vous voulez avoir de multiples modèles chargé?
Quatre. ?!?!