J'essaye d'analyser une chaîne JSON directement dans un objet géré. La chaîne json contient toutes les chaînes, mais mon entité a des objets Date.NSManagedObject - Comment obtenir le type de la propriété
si cela est ma chaîne JSON
{
"name":"John",
"dob": "12/12/2008",
etc...
}
et voici mon entité Personne:
name : NSString
dob: Date
etc...
Je veux analyser que JSON tout droit en faisant une boucle à travers les clés de la dict JSON, et le réglage les valeurs aux clés correspondantes de mon entité:
Person *aPerson = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:managedObjectContext];
NSArray *keys = [jsonDict allKeys];
for (NSString *key in keys) {
[aPerson setValue:[jsonDict valueForKey:key] forKey:key];
}
Cela ne fonctionne que si tous mes Les propriétés de l'entité sont NSStrings.
Comment puis-je obtenir le type/classe de la propriété de mon entité pour pouvoir définir les différents types?
par ex. si key = @ "dob" comment puis-je obtenir le type/classe de aPerson.dob?
donc mon code ressemblera à quelque chose comme:
Person *aPerson = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:managedObjectContext];
NSArray *keys = [jsonDict allKeys];
for (NSString *key in keys) {
if([[aPerson objectForKey:key] isKindOfClass:[NSDate class]])
{
// Create an NSDate object
}else{
[aPerson setValue:[jsonDict valueForKey:key] forKey:key];
}
}
grâce
MISE À JOUR:
Ok j'ai essayé d'utiliser la isKindOfClass et voici le résultat a été:
// for key = @"name"
// aPerson.name is NSString
[[aPerson valueForKey:key] isKindOfClass:[NSString class]] => TRUE
[[aPerson valueForKey:key] isKindOfClass:[NSObject class]] => TRUE
// for key = @"age"
// aPerson.age is NSNumber
[[aPerson valueForKey:key] isKindOfClass:[NSNumber class]] => TRUE
[[aPerson valueForKey:key] isKindOfClass:[NSObject class]] => TRUE
// for key = @"dob"
// aPerson.dob is NSDate
[[aPerson valueForKey:key] isKindOfClass:[NSDate class]] => FALSE
[[aPerson valueForKey:key] isKindOfClass:[NSObject class]] => FALSE
comment est-ce? @dynamic dob et NSDate, c'est notOfClass NSDate!
s'il vous plaît dites-moi ce que je manque!
Alternativement à ma réponse ci-dessous, vous pouvez exécuter le code ci-dessus avec un if ([key isEqualToString: "dob"]) {// Créer un objet NSDate ...} – Rog
Merci Rog, mais j'espérais rendre l'analyse plus dynamique , seulement ramasser le type de la propriété de l'entité sans avoir à connaître le nom de la clé à savoir. "dob" – Bach
Yup tous les points justes.Ce n'est pas testé par ce qui concerne l'utilisation de 'if ([[movieForKey: key] isKindOfClass: [NSDate class]])' – Rog