在我开发的应用程序中,我正在阅读JSON文件。此文件包含播放器列表。每个玩家都有一系列属性。
我创建了一个Mutable Array和一个Mutable Dictionary来存储数据。我试图将字典存储到数组索引中。我尝试使用以下代码:
var data = JSON(json!)
let players = data["API"]["Data"]
var i = 0
for (index:String, player:JSON) in players {
if let name = player["name"].string {
//THIS IS WHERE THE ERROR HAPPENS
self.pdata.setObject(name, forKey: "name")
}
if let serial = player["serial_number"].string {
self.pdata.setObject(serial, forKey: "name")
}
if let status = player["player_status"].string {
self.pdata.setObject(status, forKey: "status")
}
if let resolution = player["resolution"].string {
self.pdata.setObject(resolution, forKey: "resolution")
}
if let lastConnected = player["last_connected"].string {
self.pdata.setObject(lastConnected, forKey: "last_connected")
}
if let diskFree = player["disk_free_percent"].string {
self.pdata.setObject(diskFree, forKey: "disk_free")
}
if let memTotal = player["mem_total_phys"].string {
self.pdata.setObject(memTotal, forKey: "mem_total")
}
if let memAvail = player["mem_avail_phys"].string {
self.pdata.setObject(memAvail, forKey: "mem_avail")
}
if(self.pdata.count > 0) {
self.playerList.insertObject(self.pdata, atIndex: i)
self.pdata.removeAllObjects()
i++
}
}
使用此代码我收到以下错误,即使我在分配之前检查了该值:
致命错误:在解包可选值时意外发现nil
答案 0 :(得分:0)
评论此代码检查“名称”值我认为问题可能出现在代码的这一部分if(self.pdata.count > 0) {
self.playerList.insertObject(self.pdata, atIndex: i)
self.pdata.removeAllObjects()
i++
}
答案 1 :(得分:0)
如果您使用的是SwiftyJSON,它看起来很像,那么它可以很好地防范nil值。很有可能
如果您将pdata声明为:
var pdata:NSMutableDictionary!
然后就是问题所在。您不是在创建字典,而是可选的。在某些时候,你必须实际创建字典。你可以通过以下方式在同一个地方完成:
var pdata = NSMutableDictionary()
代替。