2011-09-08 11 views
0

RestKitにマッピングオブジェクトネストされたが、私が構造以下のいる

//要求

{ 
    "type": "handbook", 
    "hash": "" 
} 

//応答

{ 
    "body": { 
     "songs": [ 
      { 
       "id": 1, 
       "length": 1231, 
       "name": "song 1" 
      }, 
      { 
       "id": 2, 
       "length": 3155, 
       "name": "song 2" 
      } 
     ], 
     "setlists": [ 
      { 
       "id": 1, 
       "name": "setlist1", 
       "songs": [ 
        { 
         "id": 1 
        }, 
        { 
         "id": 2 
        } 
       ] 
      }, 
      { 
       "id": 2, 
       "name": "set list 2", 
       "songs": [ 
        { 
         "id": 3 
        }, 
        { 
         "id": 4 
        }, 
        { 
         "id": 5 
        } 
       ] 
      } 
     ] 
    }, 
    "state": true, 
    "type": "handbook" 

} 

私は解決のためのアドバイスが必要2つの問題: 1)私はどのようにオブジェクトを応答の "本体"にマップできますか? 2)セットリストをソングにどのように接続できますか?

答えて

0

SBJSONなどのJSONパーサーを使用して、応答をNSDictionaryオブジェクトとNSArrayオブジェクトの階層に解析します。セットリストにリストされた曲を曲自体に「接続」するには、それらの解析されたオブジェクトを手動で操作する必要があります。

  • ソング配列内のソングオブジェクトへの参照を、各セットリスト辞書内の別の値として追加することができます。これは機能しますが、辞書自体に直接的または間接的に参照を保持するオブジェクトへの参照を辞書が保持する保持サイクルを避けるように注意する必要があります。私はこれが必ずしもあなたのデータには問題ではないと思いますが、構造が進化してより複雑になった場合に対処するのは厄介なことです。

  • NSArrayとNSDictionaryを直接使用するのではなく、独自のオブジェクトクラスを定義できます。保持サイクルの複雑さは似ていますが、コレクションクラスで行うよりもやや扱いやすいものです。

  • 適切なCoreDataモデリングを使用して、これらのオブジェクトからNSManagedObjectインスタンスにデータをコピーします。これは最も洗練された堅牢なソリューションですが、要件に応じて過剰に使用される可能性があります。

関連する問題