2012-06-18 62 views
0

我想映射的字符串字典從JSON獲取到符合KVC的NSManagedObject,我可以成功使用setValue: forKey:,但我無法看到我如何映射類型。iOS的KVC DRY突變

例如,我不應該能夠設置一個日期到任何隨機字符串:Printing description of myDate: asdfsadf 然而它的工作。

我看了一下https://stackoverflow.com/a/5345023/828859,它提供了一些有用的答案。我可以進入併爲每一個屬性創建驗證......但這看起來並不很乾,因爲生病時必須驗證每個日期並在每次有日期時單獨設置出價值。

在使用setValue: forKey:之前,我寧願按類型進行變異,但我不知道如何區分屬性類型。

我想要做什麼:

switch([object typeforkey:key]){ 
    case @"NSDate": 
    //... 
    value = mutatedDate 
    //... 
} 
[object setValue:value forKey:key]; 

回答

0

我結束了使用另一個字典的屬性類型映射。然後,一個對象映射對象檢查該對象是否遵守該特定協議,並在使用setValue:forKey:之前使用屬性類型字典來轉換每個屬性。

0

你可以問什麼樣的階級已實例化爲一個對象。所以,你可以這樣做:

id myObject = [myDictionary objectForKey:key]; 

if ([myObject isKindOfClass:[NSDate class]]) { 
    // Do stuff 
} 
else if ([myObject isKindOfClass:[NSString class]]) { 
    // Do other stuff 
} 

這是因爲對象是包含有指向Class類型的對象伊娃名isa指針結構,所以你可以隨時問它來自什麼樣的類的對象。

+0

是的,但是我不清楚在我的問題中,字典來自JSON響應,所以它是一個字符串字典。 – MrJD

+0

啊,我明白了。我不認爲有一種乾淨的方式來做你想做的事。你或者需要知道密鑰提前什麼時候以及它們的類型,並根據這些信息切換對象類型,或者你需要做大量的字符串掃描來確定你正在使用的是什麼,然後進行驗證。 –