我想解析一个json字符串直接进入一个托管对象。 json字符串包含所有字符串,但我的实体具有Date对象。NSManagedObject - 如何获得属性的类型
如果这是我的JSON字符串
{
"name":"John",
"dob": "12/12/2008",
etc...
}
,这里是我的实体联系人:
name : NSString
dob: Date
etc...
我想通过JSON的字典的键循环直通解析JSON和设置值到我的实体的匹配键:
Person *aPerson = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:managedObjectContext];
NSArray *keys = [jsonDict allKeys];
for (NSString *key in keys) {
[aPerson setValue:[jsonDict valueForKey:key] forKey:key];
}
这只适用于全部我实体的属性是NSStrings。
我怎样才能获得的类型/类我的实体的财产,以便能够设置不同类型的?
例如。如果key = @“dob” 如何获得aPerson.dob的类型/类?
,所以我的代码看起来是这样的:
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];
}
}
感谢
UPDATE:
好吧,我尝试使用isKindOfClass和这里的结果:
// 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
那是怎么回事? @dynamic dob和NSDate,不是一个类NSDate!
请告诉我,我错过了什么!
或者给我的回答如下,您可以运行一个,如果([键isEqualToString:“DOB”])上面的代码{//创建NSDate的对象...} – Rog 2010-12-13 01:11:57
感谢罗格,但我希望让更多的解析动态,只需拾取实体属性的类型而不必知道密钥的名称即。 “dob” – Bach 2010-12-13 01:17:25
是的所有公平点。这是未经测试的如何使用'if([[movie valueForKey:key] isKindOfClass:[NSDate class]])' – Rog 2010-12-13 01:42:17