2012-03-26 254 views
0

我的last question was solved後,我從服務器接收到的JSON更改爲以下,我卡住處理映射以保存數據與核心數據。RestKit對象映射 - 一個實體,兩個映射

實體

Key 
- alias 
- key 
- keyType 
- keyword 
- unid 
- until 

JSON(從服務器)

{ 
    "documents": 1026, 
    "configuration": 
    { 
     ... 
    }, 
    "data": 
    [ 
     { 
      "alias": "", 
      "key": "SALUTATION", 
      "keyType": "S", 
      "keyword": "Mr", 
      "unid": "" 
     }, 
     ... 
     { 
      "alias": "Automobile", 
      "key": "ACCOUNT_MARKET_SEGMENT", 
      "keyType": "A", 
      "keyword": "Automobile", 
      "unid": "" 
     } 
    ], 
    "documentsFound": 770, 
    "maxCount": -1, 
    "since": "20120326200001", 
    "until": "20120326211309" 
} 

現在我想地圖從 「數據」 加密鑰的所有數據 「直到」 爲實體「Key」但找不到合適的解決方案。我的映射到目前爲止獲得的數據看起來像這樣,運作良好,但錯過了「直到」 - 鍵,當然。

RKManagedObjectMapping* keyMapping = [RKManagedObjectMapping mappingForClass:[Key class]]; 
keyMapping.rootKeyPath = @"data"; 
[keyMapping mapKeyPath:@"key" toAttribute:@"key"]; 
[keyMapping mapKeyPath:@"keyword" toAttribute:@"keywordEN"]; 
[keyMapping mapKeyPath:@"alias" toAttribute:@"alias"]; 
keyMapping.setDefaultValueForMissingAttributes = YES; 

感謝您的想法!

回答

2

你可能會想要做兩個映射。第一個映射將包含整個對象,並與嵌套的「數據」路徑有關係。

RKObjectMapping *keyMapping = [RKObjectMapping mappingForClass:[Key class]]; 
[keyMapping mapAttributes:@"alias", @"key", nil]; 
[keyMapping mapKeyPath:@"keyword" toAttribute:@"keywordEN"]; 

RKObjectMapping *outerMapping = [RKObjectMapping mappingForClass:[Container class]]; 
[outerMapping mapKeyPath:@"data" toRelationship:@"keys" withMapping:keyMapping]; 
[outerMapping mapAttributes:@"since", @"until", "maxCount", "documentsFound", nil]; 

這會給你一個新的對象與你的元數據,然後你的容器的keys屬性上的關鍵對象的數組。您可以使用0.9.4開發分支上的基於resourcePath的映射註冊(即將發佈),而不是使用rootKeyPath。

+0

再次感謝您的快速和明智的答案。我將盡快下載0.9.4;) – flashfabrixx 2012-03-27 07:44:09