2014-06-25 169 views
-1

我的問題與RestKit: mapping JSON array of strings非常相似,只是它特定於RestKit 0.09。我看了其他幾個問題,但仍然陷入困境。RestKit 0.09:映射JSON數組字符串

由於我無法控制的原因,我無法升級到RestKit 0.20。我正在使用的JSON是:

{ 
    "brands":[ 
     "AN", 
     "UO", 
     "FP", 
     "TR", 
     "BN" 
    ], 
    "meta":{ 
     "message":"Current Registry Configuration." 
    }, 
    "event_types":[ 
     "WEDDING", 
     "ANNIVERSARY", 
     "BIRTHDAY", 
     "HOUSEWARMING", 
     "SPECIAL OCCASION" 
    ], 
    "links":[ 

    ] 
} 

我能夠映射「meta」(和其他幾個域)對象就好了。但我無法映射「event_types」,並且不需要「品牌」或「鏈接」。

我當前的代碼如下:

+ (void) addElementMappings:(RKObjectMapping *)mapping 
{ 
    if ([[self superclass] respondsToSelector:@selector(addElementMappings:)]) { 
     [[self superclass] performSelector:@selector(addElementMappings:) 
           withObject:mapping]; 
    } 
    [mapping mapKeyPath:@"event_types" 
      toAttribute:@"eventType"]; 

    RKObjectManager* objectManager = [RKObjectManager sharedManager]; 
    if (![objectManager.mappingProvider mappingForKeyPath:@"event_types"]) { 
     [objectManager.mappingProvider setMapping:mapping 
             forKeyPath:@"event_types"]; // for KVC path 
    } 
} 

和EVENTTYPE是的NSArray(我也嘗試將其定義爲NSString的 - 相同的結果,如下)。

就這樣,代碼會拋出一個異常「此類不是關鍵字event_types的編碼兼容關鍵值」。

如果我從@「event_types」將mapKeyPath更改爲nil(類似於0.20),則會出現異常「無法定義映射要映射的元素名稱的元素」。

如果我完全省略[mapping mapKeyPath:toAttribute],沒有例外,但我只能獲取元對象,而不是event_types。

在RestKit 0.09中,如何在不使用密鑰的情況下映射屬性?

回答

0

解決方案是創建一個包含感興趣的嵌套對象(品牌,event_types)作爲NSArray的類(GRConfigDTO)。映射很簡單:

[mapping mapKeyPath:@"brands" 
     toAttribute:@"brands"]; 
[mapping mapKeyPath:@"event_types" 
     toAttribute:@"eventTypes"]; 

我的前任已經修改RestKit 1.09(與我們的服務器JSON),以確保映射是絕不含糊,因此總是用零targetClass - 這就是爲什麼升級RestKit不是一種選擇。我正在使用第三方服務,不得不按照原樣處理他們的JSON。

的關鍵是使所有工作指定targetClass在使用SendObject電話:

[self sendObject:nil 
       path:kConfig 
     requestType:GET 
     targetClass:[GRConfigDTO class] 
      delegate:self 
     callbackMethod:@selector(registryEventTypesResults:error:)]; 

隨着targetClass集,RestKit能夠按預期執行映射。