2010-05-04 5 views
2

J'ai créé une entité dans CoreData qui inclut un type d'attribut Transformable implémenté comme un NSDictionary. L'attribut NSDictionary contient uniquement les valeurs d'une classe personnalisée. Les propriétés de la classe personnalisée sont toutes de type NSString. La classe personnalisée est conforme à l'implémentation NSCoding:Les mises à jour de l'attribut NSDictionary dans CoreData ne sont pas sauvegardées

- (void) encodeWithCoder: codeur (NSCoder *);

- (id) initWithCoder: (NSCoder *) codeur

Lors de l'enregistrement de l'entité pour la première fois tous les attributs, y compris le type transformables (NSDictionary) sont correctement enregistrés dans la base de données. Lorsque la même entité est extraite de la base de données et mise à jour (y compris l'attribut Transformable), elle semble être correctement mise à jour. Toutefois, lorsque l'application est fermée puis rouverte en récupérant l'entité, elle n'affiche pas le type d'attribut Transformable mis à jour, bien que le reste des attributs de type NSDate et NSString soient à jour. L'attribut Transformable est la valeur enregistrée originale et non la valeur mise à jour.

Est-ce un problème avec KVO ou est-ce que je manque quelque chose d'autre en essayant d'enregistrer un NSDictionary rempli d'une classe personnalisée à CoreData?

Répondre

5

Redéfinissez-vous la valeur dans NSManagedObject? Le NSManagedObject ne surveillera pas les modifications de l'objet transformable. Vous devez appeler le configurateur approprié avant de sauvegarder.

3

J'ai rencontré le même problème et j'ai fini par basculer vers NSDictionary en tant qu'attribut transformable au lieu de NSMutableDictionary. Il suffit de récupérer le NSDictionary sous le nom mutableCopy, de travailler dessus, de placer le résultat final dans un NSDictionary et de le réinsérer dans le managedObject. L'astuce pour moi et moi n'avons pas encore trouvé une autre solution.

Questions connexes