1

以下のように、ネストされた 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エンティティに直接マップするにはどうすればよいですか? rewardsjson からのコンテンツを格納するためだけに、コレクションや別のエンティティを持ちたくありません。各コレクションを、対応する高レベルのプロパティと共にエンティティrewards内の個別の行として格納したいだけです。RewardreceiverID

以下のマッピングを試みましたが、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"
}];
4

1 に答える 1

0

本当にやりたいことができない。receiver-idJSON の構造は、多数のRewardインスタンスとの関係を保持する 1 つのオブジェクトにつながります。これは、Core Data がデータを保存するのに適している方法でもあります。

あなたが現在持っているのは、あなたが受け取っているものとは完全に異なる JSON をサポートするための、多数の異なる機能で構成されたマッピングです。次のいずれかが必要です。

  1. ソース JSON を変更してreceiver-id、配列内の各項目にを埋め込みます
  2. 「コンテナ」のマッピングを作成し、関係を追加しますrewardsMapping(そしてそのマッピングを修正します)
  3. いくつかのキーを含むディクショナリにすべてをマップし、そのうちの 1 つが他のディクショナリの配列を保持し、それをコア データ ストアにポスト プロセスします。
于 2013-09-26T19:44:09.857 に答える