我有以下结构:
获取手册:
//请求
{
"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连接到它的歌曲?
答案 0 :(得分:0)
使用诸如SBJSON之类的JSON解析器将响应解析为NSDictionary和NSArray对象的层次结构。要将集合列表中列出的歌曲“连接”到歌曲本身,您必须对这些已解析的对象进行一些手动操作。你有几个选择:
您可以将songs数组中歌曲对象的引用添加为每个集合列表字典中的另一个值。这可以工作,但是你必须小心避免保留周期,其中字典保留对直接或间接保留对字典本身的引用的对象的引用。我不认为这对您的数据来说不一定是个问题,但如果结构发展变得更复杂,那么处理这个问题是件令人讨厌的事情。
您可以定义自己的对象类,而不是直接使用NSArray和NSDictionary。可能有类似的保留周期复杂性,但比使用集合类更容易管理。
使用适当的CoreData建模将数据从这些对象复制到NSManagedObject实例中。这是最优雅,最强大的解决方案,但对您的要求可能过度