我想解析一個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