2

レストキットのドキュメントは非常に優れており、オブジェクト モデリングに関するさまざまな例が含まれています。ネストされたマッピングの例もありますが、私のシナリオはこれとは少し異なります。RestKit のドキュメントでは、ネストされた属性のマッピング例を次の json 形式で提供しています。

RestKit ドキュメントのサンプル JSON 構造:

{
  "blake": {        
    "email": "blake@restkit.org",        
    "favorite_animal": "Monkey"    
  },    
  "sarah": {
    "email": "sarah@restkit.org",   
    "favorite_animal": "Cat"
  }
}

私のjsonがこれと少し違うとしましょう。

私のJSON構造:

{ 
  "id" : 1,
  "author" : "RestKit",
  "blake": {        
    "email": "blake@restkit.org",        
    "favorite_animal": "Monkey"    
  },    
  "sarah": {
    "email": "sarah@restkit.org",   
    "favorite_animal": "Cat"
  }
}

次の属性と多くの関係を持つ 2 つの異なる managedobject モデルを作成しました。

上記の JSON オブジェクトをマップするための私の構造製品と作成者の 2 つの異なるエンティティ。

Product                                           Creator 

identifier          <------------------- >>       name
author                                            email
                                                  favouriteAnimal

さて、製品モデルのマッピングは次のようになります。

これは、Product エンティティをマッピングする方法です [mapping mapKeyPath:"id" toAttribute:"identifier"]; [マッピング mapKeyPath:"作成者" toAttribute: "作成者"];

ただし、ネストされたディクショナリ属性のマッピングは機能しません。// [マッピング mapKeyOfNestedDictionaryToAttribute:@"creators"];

さて、著者クラスです。

上記の JSON 構造をマップする通常の方法がわかりませんでした。

4

1 に答える 1

6

Web サービスを制御できる場合は、応答データを次のように再編成することを強くお勧めします。

{
  product: 
  {
    id: 1,
    author: 'RestKit',
    creators: [
      {
        id: 1,
        name: 'Blake',
        email: '...',
        favorite_animal: 'Monkey'
      },
      {
        id: 2,
        name: 'Sarah',
        email: '...',
        favorite_animal: 'Cat'
      }
    ]
  }
}

この構造に従って、RestKit のネストされたマッピング機能を使用することができ、オブジェクト ローダー デリゲートによって受信された逆シリアル化されたオブジェクトに関係が正しく反映されます。RestKit は、名前付けと構造の標準に依存して、タスクを達成するために必要なコードを簡素化します。あなたの例はキーと値のコーディング標準から逸脱しているため、RK はデータ形式と対話する簡単な方法を提供しません。

アクセスできない場合や変更できない場合は、既知のキーと値のペアをマッピングでマッピングし、残りの割り当てをカスタム エバリュエーターで実行する必要があると思います。不明なキーは実際には関連付けられた作成者の名前の値であり、関連付けられた値にはそれぞれの属性ハッシュが含まれていると想定する必要があります。それを使用して、各オブジェクトを手動で再構築します。

于 2012-08-11T20:03:05.357 に答える