J'ai hérité du code pour une application iPhone en utilisant les données de base écrites par une autre équipe. En regardant les relations entre les objets et comment les objets sont créés/utilisés dans le code, j'ai réalisé qu'il y avait une fuite de mémoire dans le stockage permanent. Assez sûr quand je supprime tous les objets de niveau supérieur des données de base là où les objets laissés pour compte. Quoi de plus il y avait une opération où les valeurs/relations d'un objet étaient copiées à un autre et cela laissait des objets orphelins dans les données de base.Fuite de mémoire dans le stockage permanent
Depuis, j'ai corrigé les problèmes et il n'y a plus de nouveaux objets orphelins stockés dans les données de base. Le problème est maintenant comment puis-je retiré ces objets orphelins du stockage permanent des utilisateurs existants qui ont utilisé l'application qui fuit pour qui sait combien de temps?
Ma pensée initiale était de copier les objets de niveau supérieur à un autre ManagedObjectContext. Puis supprimez tous les objets hors du contexte d'origine. Enfin, copiez les objets de niveau supérieur dans le contexte d'origine. Est-ce que quelqu'un voit des problèmes avec ceci ou a une meilleure idée?
vous avez raison sur le modèle de données faisant partie du problème. Ils avaient des relations définies avec Nullify au lieu de Cascade. Je suis curieux de savoir ce que vous voulez dire par validation. Valider comment? – iHorse
Je suis d'accord avec aller chercher pour une relation vide. Pour la validation, il signifie que vous pouvez remplacer l'entrée validateFor <...>, mettre à jour, supprimer une classe d'objets gérés, et mettre une certaine logique là-dedans. Si cela échoue, l'objet ne sera pas sauvegardé, avec la possibilité de construire et d'élever votre propre message d'erreur comme 'l'objet ne peut pas être sauvegardé car orphelin de ...' – Leonardo