J'essaie de décider si une application d'application, en particulier l'élément sélectionné dans une liste, doit être stockée dans les données de base ou Nsuserdefault. P>
En règle générale, je pense que les préférences et l'état d'application doivent persister dans NSUserDefault et les données de niveau de modèle doivent persister ailleurs, disons dans les données de base. Mon modèle jusqu'à présent est: p>
Je prévois de stocker l'ordre de tri de certaines entités dans les données de base. Sans cette information (c'est-à-dire un attribut "Sortindex" ou "Commander"), chaque instance d'entité devrait être augmentée avec des données à partir des paramètres par défaut de l'utilisateur. P>
Cependant, le stockage de l'état dans le modèle semble être une pente glissante. Si je stocke l'ordre de tri, il semble également approprié de stocker la sélection car ils sont à la fois l'état d'une liste. Les données de sélection de mon cas d'utilisation peuvent réellement être assez importantes. Plus précisément, les icônes d'une liste dépendent de la sélection dans chacune de leurs sous-listes. P>
Quelqu'un a-t-il une ligne difficile qu'ils dessinent par rapport à Nsuserdefaults par rapport au modèle de données? P>
3 Réponses :
Vous n'avez pas cessé de savoir s'il s'agissait d'une application basée sur des documents (comme dites, TextEdit) ou d'une bibliothèque basée sur une bibliothèque (comme Dites, Adressage). P>
Cela peut vous aider à décider où ces informations devraient aller: assumer une application basée sur des documents. Supposons que ses documents sont placés sous la version-contrôle (cela est réellement faisable lors de l'utilisation du type de magasin de données XML de Core Data). Ouvrez l'application, modifiez les ordres de tri du doc. Est-ce que cela sale le document? Cette modification vaut-elle la peine d'être enregistrée? Le changement serait-il précieux pour les autres utilisateurs de ce référentiel? P>
Typiquement, les commandes de tri ne sont pas suffisamment utiles pour garantir le stockage basé sur des documents (nom d'enregistrement automatique d'ALA NSTableView dans le constructeur d'interface). Mais votre application peut placer une priorité sur le tri (ça sonne comme elle). P>
Donc, il n'y a pas de règle dure et rapide. Mais je pense que l'idée d'avoir un document sous contrôle de version, potentiellement partagée avec d'autres, fournit un bon cadre intellectuel pour rendre votre cas de chaque côté. P>
C'est une application iPhone qui dans mon cas relève du scénario basé à la bibliothèque. J'aime bien le modèle mental de la prise en compte d'une application multi-documents hypothétiques et si le changement rendrait l'application sale. Dans mon cas, la sélection d'une sous-liste modifie la vue de la liste supérieure (spécifiquement, la sous-sélection change quelle image est affichée à côté d'un élément de la vue la plus haute). En ce qui concerne le tri, je voulais dire que l'ordre de tri est défini par l'utilisateur. C'est-à-dire qu'ils peuvent commander arbitrairement la liste (comme la création d'une liste de lecture dans iTunes).
Le bâtiment sur le "sale est-il sale du document" J'aimerais aussi ajouter "la modification des données entraînerait une addition à la pile d'annulation". Annuler fonctionne pour des applications basées sur des documents et basées à la bibliothèque, il semble donc une bonne heuristique.
Je suis d'accord avec Rentzsch, mais une autre façon de le voir: p>
est la partie de sélection des données ou est-ce une métadonnée? Si les métadonnées, est-ce que c'est des métadonnées d'un seul document ou est-il indiquant que cela devrait s'appliquer à tout document qui se produit ensuite suivant? P>
Les métadonnées spécifiques à un document peuvent vouloir être stockées comme attribut étendu. Par exemple, Textmate stocke la sélection pour un document de cette façon, autant que Becbedit, MPW et d'autres personnes utilisées pour stocker les paramètres d'onglets, la taille de la fenêtre, etc. en tant que ressource dans la fourche de ressource. Les métadonnées sont considérées comme facultatives et le document est intact s'il est dépouillé. P>
Si la sélection fait partie intégrante des données, alors par tout moyen, stockez-la dans les données, à l'aide de données de base si vous arrivez à balancer de cette façon. P>
Et si ce n'est pas une application basée sur un document, Nsuserdefaults est le chemin le plus simple, car le support est généralement intégré à des sous-classes NSView communes via des fixations. P>
Je suis d'accord. J'ai oublié d'énoncer ce que mon modèle existant était, alors j'ai réparé ma question (je crois que la "bonne chose" de faire ici) J'ai eu du mal à décider si les informations sont une "partie intégrante des données". Avec le modèle de Rentzsch (voudrais-je afficher le Dirty-Dot) Cela devient plus facile,
Je n'ai personnellement pas une ligne difficile entre économiser des préférences dans le fichier lui-même ou à Nsuserdefault. p>
Mais j'ai toujours eu tendance à être évidente: p>
Pour l'état de sélection Spécifiquement, je jugerais si la conservation est suffisamment importante pour l'utilisateur. Si c'est le cas, et suffisamment important pour vous déplacer avec le document sur un autre ordinateur, je le garderais dans le document lui-même. p>
Si ce n'est pas important (ou applicable), je ne me soucierais pas de l'enregistrer du tout. p>
Je pense que cela me trébuchait parce que sur iphone, je ne considère pas nécessairement aucune application comme "Documents"; Ce sont toutes des données seulement. L'état d'épargne devient beaucoup plus important puisque les applications de commutation signifie quitter et relancement.
Je pense que même dans une application iPhone - si l'état de la section dans l'emplacement actuel des utilisateurs est important pour les données, je l'enregistrerais, sinon je ne me dérangerais pas. On dirait que cela pourrait être, alors je l'enregistrerai avec les données.