J'essaie de décider si un état de l'application, en particulier l'élément sélectionné dans une liste, doit être stocké dans Core Data ou NSUserDefaults.Quand l'état de l'application appartient-il aux données de base au lieu de NSUserDefaults?
Généralement, je crois que les préférences et l'état de l'application doivent persister dans NSUserDefaults, et les données au niveau du modèle doivent persister ailleurs, par exemple dans les données de base. Mon modèle jusqu'à présent est:
- Les données doivent-elles être stockées? Si l'utilisateur ne pas l'assurance raisonnable que ce soit, alors jetez-(par exemple, la position du curseur est pas enregistré dans TextEdit)
- NSUserDefaults:
- Si l'application était multi-document, le cadre serait appliquer à tous les documents
- Il est concevable que les données seront configurées dans les préférences
- Avoir les données en dehors du modèle logique pour le test (permutation plusieurs paramètres par défaut avec un magasin de modèle)
- modèle niveau
- Les données appartiennent clairement comme un attribut d'un objet au niveau du modèle
- Les données sont suffisamment grand pour que le stockage en NSUserDefaults causerait des problèmes de performance
- Il serait difficile ou à forte intensité pour l'utilisateur recréer les données (ils seraient certainement tenir compte de la perte de ces informations « perte de données »)
Je prévois de stocker l'ordre de tri de certaines entités de base de données. Sans cette information (c'est-à-dire un attribut "sortIndex" ou "order"), chaque instance d'entité devrait être augmentée avec des données provenant des valeurs par défaut de l'utilisateur. Cependant, stocker 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 pour mon cas d'utilisation peuvent en fait ê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.
Est-ce que quelqu'un a une ligne dure qu'il dessine en ce qui concerne NSUserDefaults vs modèle de données?
C'est une application iPhone qui, dans mon cas, relève du scénario de bibliothèque. J'aime le modèle mental de considérer une application multi-document hypothétique, 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 (en particulier, la sous-sélection change quelle image est affichée à côté d'un élément dans la vue supérieure). En ce qui concerne le tri, je voulais dire que l'ordre de tri est défini par l'utilisateur. Autrement dit, ils peuvent arbitrairement ordonner la liste (comme créer une liste de lecture dans iTunes). – orque
En se basant sur le «est-ce que le document est sale», j'aimerais également ajouter «la modification apportée aux données entraînerait-elle un ajout à la pile d'annulation». Annuler fonctionne à la fois pour les applications basées sur des documents et pour les bibliothèques, ce qui semble être une bonne heuristique. – orque