我正在尝试将json字符串直接解析为托管对象。
json字符串包含所有字符串,但是我的Entity具有Date对象。
如果这是我的json字符串
{
"name":"John",
"dob": "12/12/2008",
etc...
}
这是我的实体人:
name : NSString
dob: Date
etc...
我想通过遍历Json dict的键,并将值设置为我实体的匹配键来直接解析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时,此方法才有效。
如何获取实体属性的类型/类以设置各种类型?
例如。
如果键= @“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];
}
}
谢谢
更新:
好的,我尝试使用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,不是notOfClass NSDate!
请告诉我我想念的东西!
最佳答案
我知道,这是一个较晚的答案,但是正如我今天正在寻找一个好的解决方案...
这是我现在正在使用的:
NSEntityDescription * myEntity = [object entity];
NSDictionary * attributes = [myEntity attributesByName];
if ([[[attributes objectForKey:key] attributeValueClassName] isEqualToString:@"NSDate"]) {
// this type is NSDate
}
希望这可以帮助 :)
关于iphone - NSManagedObject-如何获取属性的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4425079/