RestKit中的嵌套对象映射

时间:2011-09-08 22:31:39

标签: objective-c 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"

}

我需要一个解决两个问题的建议: 1)我如何在响应的“主体”中映射对象? 2)如何将Setlist连接到它的歌曲?

1 个答案:

答案 0 :(得分:0)

使用诸如SBJSON之类的JSON解析器将响应解析为NSDictionary和NSArray对象的层次结构。要将集合列表中列出的歌曲“连接”到歌曲本身,您必须对这些已解析的对象进行一些手动操作。你有几个选择:

  • 您可以将songs数组中歌曲对象的引用添加为每个集合列表字典中的另一个值。这可以工作,但是你必须小心避免保留周期,其中字典保留对直接或间接保留对字典本身的引用的对象的引用。我不认为这对您的数据来说不一定是个问题,但如果结构发展变得更复杂,那么处理这个问题是件令人讨厌的事情。

  • 您可以定义自己的对象类,而不是直接使用NSArray和NSDictionary。可能有类似的保留周期复杂性,但比使用集合类更容易管理。

  • 使用适当的CoreData建模将数据从这些对象复制到NSManagedObject实例中。这是最优雅,最强大的解决方案,但对您的要求可能过度