2012-09-05 5 views
0

J'essaie d'accéder aux propriétés d'un objet de données de base transformables comme ceci:transformables Core Data Attribute

MainObject *localObject = [self.myArray objectAtIndex:indexPath.row]; 
TransformableObject *actualObject = localObject.transformableObject; 

Cela fonctionne très bien. I NSLogactualObject et obtenir les paires clé correcte/valeur:

actualObject:{ 

    property = "Foo"; 
    property2 = "Apple"; 
} 

Cependant, quand j'essaye d':

NSLog (@"property:%@",actualObject.property) Je reçois -[__NSCFDictionary property]: unrecognized selector sent to instance

Qu'est-ce que je fais mal? Dans mon cœur Classe de données, j'ai:

@interface MainObject : NSManagedObject 

@property (nonatomic, retain) TransformableObjectClass *transformableObject; 

EDIT: Voici comment je mis l'objet dans Core Data

 MainObject *event = (MainObject *)[NSEntityDescription insertNewObjectForEntityForName:@"MainObject" inManagedObjectContext:[AppDelegateMy managedObjectContext]]; 
     [event setValuesForKeysWithDictionary:[myArrray objectAtIndex:i]]; 
+0

Comment définissez-vous la valeur de 'localObject.transformableObject' initialement? Comment l'attribut est-il configuré dans votre modèle? 'realObject' est clairement un 'NSDictionary', mais vous ne nous avez pas donné assez d'informations pour en déduire pourquoi. –

+0

TransformableObjectClass est une autre classe Core Data NSManagedObject. – Eric

+0

C'est peut-être, mais l'erreur montre que ce qui est réellement affecté à cette propriété est une instance de 'NSDictionary'. Alors, comment est-ce arrivé? –

Répondre

1

Ni -setValuesForKeysWithDictionary: ni base de données est assez magique pour faire ce travail sans un peu plus effort de votre part. À l'heure actuelle, vous affectez simplement le dictionnaire dans votre réponse JSON à la propriété transformableObject du nouvel objet géré. Si vous avez essayé de sauvegarder votre contexte, je suppose qu'il échouerait probablement. Si vous voulez que ces dictionnaires se transforment en véritables instances TransformableObjectClass, vous devez le faire vous-même.

Si vous avez beaucoup de ce genre de chose dans votre application, vous pouvez regarder dans RestKit, ou l'une des autres bibliothèques de mappage JSON-à-objet Open Source comme ClassMapper.

+0

Cela économise bien, et pourquoi puis-je accéder à actualObject ci-dessus en tant que propriété de NSManagedObject si -setValuesForKeysWithDictionary ne fonctionne pas? – Eric

+1

Ça fonctionne bien. Ça ne fait juste pas ce que tu penses. En Objective-C, les types de pointeurs sont plus descriptifs que proscriptifs. Si vous placez un dictionnaire dans cette propriété au lieu de la classe que vous avez déclarée comme, le moteur d'exécution ne se plaindra pas. Mais si vous essayez d'envoyer un message à ce dictionnaire, il ne fonctionnera pas. Comme tu vois. –

+0

Pouvez-vous poster une capture d'écran de la configuration du modèle? Spécifiquement les propriétés de l'attribut en question? –