2017-10-20 19 views
0

Je souhaite stocker certains attributs supplémentaires dans mes objets gérés qui ne sont pas enregistrés dans le magasin persistant avec d'autres propriétés (persistantes), c'est-à-dire stockées uniquement en mémoire, de sorte qu'après le redémarrage de l'application, ces attributs non persistants sont réinitialisés aux valeurs par défaut. J'ai étudié les propriétés transitoires mais elles sont perdues lorsque l'objet est récupéré à partir d'un autre écran, ce qui ne convient pas à mon cas.Propriétés de données de base effacées lors de la sortie de l'application (ou non dans la mémoire persistante)

Est-ce que Core Data a quelque chose comme ça?

+0

Je ne suis pas sûr de comprendre complètement votre question, mais sonne comme le type de magasin ['in-memory'] (https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/PersistentStoreFeatures .html) est ce que vous cherchez (?) – Alladinian

+0

@Alladinian J'ai mis à jour ma question. En bref, je veux avoir des propriétés non persistantes avec les propriétés persistantes, mais telles qu'elles soient conservées lorsque les objets sont extraits du MOC (ou d'un autre MOC). – iosdude

Répondre

0

J'ai eu une bonne expérience avec le stockage de valeurs supplémentaires en dehors des données de base. J'ai utilisé un dictionnaire où la clé est l'identifiant de la propriété core-data et la valeur est un autre dictionnaire mutable. Cela permet une recherche rapide pour l'une de ces propriétés supplémentaires. Je l'ai utilisé dans une application de messagerie pour suivre le statut en ligne. Le principal inconvénient est que toute recherche et tout tri doit être fait en mémoire et non au niveau de la base de données, mais ce n'était pas un gros problème.

0

Si vous utilisez des sous-classes de NSManagedObject (ce qui est généralement vrai), vous pouvez simplement ajouter des propriétés supplémentaires à ces sous-classes. Ces propriétés n'ont rien de spécial, car toutes les propriétés ne doivent pas être gérées. Créez-les comme vous le feriez pour n'importe quelle autre classe. Vous devrez indiquer à Xcode d'utiliser la génération de code "Category/Extension" pour l'entité à la place de "Class Definition", afin de pouvoir modifier le fichier de classe. Mais une fois que vous avez fait cela, ajoutez simplement les propriétés dont vous avez besoin. Les données de base ne le sauront pas ou ne s'en soucieront pas.