2013-09-26 90 views
1

我有如下嵌套JSON結構:RestKit:映射嵌套JSON一個實體對象

{ 
    "receiver-id":123456, 
    "rewards": [ 
     { 
     "content": "reward text 1", 
     "reward-code": "456ABC", 
     "reward-Id": "234" 
     }, 
     { 
     "content": "reward text 2", 
     "reward-code": "012ABC", 
     "reward-Id": "567" 
     } 
    ] 
} 

我有一個實體對象如下,我要映射的上述JSON來直接:

@interface Reward: NSManagedObject 
@property (nonatomic, retain) NSNumber * receiverID; 
@property (nonatomic, retain) NSString * content; 
@property (nonatomic, retain) NSString * rewardCode; 
@property (nonatomic, retain) NSString * rewardID; 

我怎樣才能得到上述json結構直接映射到上面Reward實體?我不想擁有一個集合或其他實體來存儲json的rewards內容。我只希望每個rewards集合都作爲Reward實體中的單獨一行存儲,以及相應的高級別receiverID屬性。

我試過下面的映射,但只映射了receiverID。我究竟做錯了什麼?在這種情況下,如何才能訪問rewards數組元素?

_rewardsMapping = [RKEntityMapping mappingForEntityForName:@"Reward" inManagedObjectStore:objectStore]; 
_rewardsMapping.forceCollectionMapping = YES; 
_rewardsMapping.identificationAttributes = @[ @"rewardID" ]; 
[_rewardsMapping addAttributeMappingsFromDictionary:@{ 
    @"receiver-id":@"receiverID", 
    @"(rewards).content": @"content", 
    @"(rewards).reward-code": @"rewardCode", 
    @"(rewards).reward-id": @"rewardID" 
}]; 

回答

0

你真的不能做你想做的。你的JSON的結構會導致一個對象持有receiver-id,並且與一些Reward實例有關係。這也是Core Data希望存儲數據的方式。

您目前擁有的是由許多不同功能組成的映射,以支持完全不同的JSON與您正在接收的內容。你要麼需要:

  1. 修改源JSON嵌入receiver-id到每個項目陣列
  2. 中的「容器」創建一個映射,然後添加一個關係到你的rewardsMapping(和修復映射)
  3. 將所有內容映射到包含幾個鍵的字典中,其中一個鍵包含其他字典以及其他字典的數組,然後將該過程存入您的核心數據存儲區