0

私は次の構造を持っています:

ハンドブックを入手する:

//リクエスト

{
   "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)セットリストをその曲に接続するにはどうすればよいですか?

4

1 に答える 1

0

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

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

  • NSArrayとNSDictionaryを直接使用するのではなく、独自のオブジェクトクラスを定義できます。同様の保持サイクルの複雑さを持つ可能性がありますが、コレクションクラスで行うよりも少し管理しやすくなります。

  • これらのオブジェクトから適切なCoreDataモデリングを使用してNSManagedObjectインスタンスにデータをコピーします。これは最もエレガントで堅牢なソリューションですが、要件に対してやり過ぎかもしれません

于 2011-09-08T23:29:42.813 に答える