2010-11-03 5 views
3

J'utilise Core Data NSManagedObject (dans une application iOS) avec un attribut de type «transformable» pour stocker un bloc de données. Les données sont codées/décodées à l'aide du transformateur de valeur NSKeyedUnarchiveFromData intégré. Le problème est que j'ai du mal à mettre NSManagedObject à jour correctement après que les données binaires ont changé. Disons, par exemple, le code ressemble à:Données de base ne mettant pas à jour un attribut transformable

id temp = [myManagedObject myTransformableAttribute]; 

//.. do something with temp 

[myManagedObject setMyTransformableAttribute:temp]; 

NSError *error; 
if(![[myManagedObject managedObjectContext] save:&error]) { 
    //present error 
} 

Il me semble que « re-réglage » l'attribut transformables sur l'objet géré, puis enregistrer l'objet géré, devrait entraîner les données à re- codé via le transformateur de valeur NSKeyedUnarchiveFromData. Mais l'encodeur n'est jamais appelé et les données mises à jour ne sont pas enregistrées.

Si au lieu de redéfinir les données d'origine sur l'objet géré, je crée une copie des données modifiées et définir que sur l'objet géré, puis les modifications sont reconnues. Est-il possible que les données de base utilisent une version mise en cache des données? Ou y a-t-il autre chose que je fais mal ici? Merci ...

Répondre

2

Paraît que vous devez remplacer classe initialize méthode dans votre sous-classe d'entité NSManagedObject également pour le transformateur travailler (bogue de base de données connu). code suivant à partir du code emplacement d'Apple exemple, il est testé et fonctionne: http://developer.apple.com/library/ios/#samplecode/Locations/Introduction/Intro.html

+ (void)initialize { 
    if (self == [Event class]) { 
     UIImageToDataTransformer *transformer = [[UIImageToDataTransformer alloc] init]; 
     [NSValueTransformer setValueTransformer:transformer forName:@"UIImageToDataTransformer"]; 
    } 
} 
Questions connexes