我正在开发一个项目,并且已经达到了我希望在表格视图中显示来自Web服务的数据的阶段。我正在使用Alamofire库但是当我构建我的项目时,我收到错误:
无法将'__NSDictionaryI'(0x16e9900)类型的值转换为'NSArray'(0x16e96f8)。
我的代码如下:
{
"oscBalances": [
{
"walletName": "Main Balance",
"walletBalance": -0.548927,
"walletBalanceExpiryDate": 4607186400000
},
{
"walletName": "Gprs_bundle",
"walletBalance": 0,
"walletBalanceExpiryDate": 1472853599000
},
{
"walletName": "Go_SVB1",
"walletBalance": 0,
"walletBalanceExpiryDate": 1480738710000
},
{
"walletName": "Go_SVB1",
"walletBalance": 0,
"walletBalanceExpiryDate": 1480738710000
},
{
"walletName": "night_bundle",
"walletBalance": 245.66,
"walletBalanceExpiryDate": 1486147937000
}, {
"walletName": "night_bundle",
"walletBalance": 245.66,
"walletBalanceExpiryDate": 1486147937000
},
{
"walletName": "Daily_Data1",
"walletBalance": 510437397772.4562,
"walletBalanceExpiryDate": 1487250499000
},
{
"walletName": "Go_SVB1",
"walletBalance": 0,
"walletBalanceExpiryDate": 1480738710000
}
],
"pcrfBalances": [
{
"svrName": "Weekly Whatsapp",
"quotaBalance": 174.92578125,
"quotaConsumption": 5.07421875,
"expiryDate": 1488204496000
}
]
}
json数据如下:
{{1}}
我想为OCS余额显示walletName,walletBalance和walletBalanceExpiryDate,对于要显示svrName,quotaBalance,quotaConsumption,expiryDate
的pcrfBalances答案 0 :(得分:3)
出现该错误“无法将类型'__NSDictionaryI'(0x16e9900)的值转换为'NSArray'(0x16e96f8)。”换行:
self.listData = response.result.value as! [[String : AnyObject]]
原始Dict对象就在这里:
[String : AnyObject]
与字典数组(即抛出错误)
[[String : AnyObject]]
所以这条线应该如此成功:
self.listData = response.result.value as! [String : AnyObject]
<强>更新强> @rmaddy提出了一个很好的观点。同样来自您共享的JSON,看起来您尝试访问的数组就在字典中。
所以:
if let dictionary = response.result.value as? [String : AnyObject]{
self.listData = dictionary["oscBalances"] as! [[String : AnyObject]]
}
应该返回您想要的列表数据
答案 1 :(得分:1)
错误来自:
self.listData = response.result.value as! [[String : AnyObject]]
由于错误是抱怨您正在尝试将字典转换为数组,这显然意味着response.result.value
是一个字典。因此,您将其作为数组投射的尝试失败了。
也许字典包含所需的数组。你需要挖掘字典并获得你想要的任何数据。或者将你的演员表改为合适的字典。
更具体的答案将要求您编辑您的问题,其中包含有关您获得的数据以及您需要的数据的更多具体细节。
答案 2 :(得分:0)
根据您粘贴的JSON数据,您似乎正在尝试访问oscBalances
列表,因此您的代码应如下所示:
if let dict = response.result.value as? [String : AnyObject], let list = dict["oscBalances"] as? [[String : AnyObject]] {
self.listData = list
}
或者,如果您真的想强制转换数据(如果JSON中出现意外情况会崩溃),它看起来像这样:
self.listData = (response.result.value as! [String : AnyObject])["oscBalances"] as! [[String : AnyObject]]
第一种方式更安全。