iOS - 将对象添加到导致崩溃的NSMutableDictionary

问题描述:

在我正在开发的应用程序中,我正在阅读JSON文件。这个文件包含一个玩家列表。每个玩家都有一系列属性。iOS - 将对象添加到导致崩溃的NSMutableDictionary

我已经创建了一个可变数组和一个可变字典来存储数据。我试图将字典存储到数组索引中。我试着用下面的代码可以这样做:

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++ 
    } 
} 

使用此代码,我发现了以下错误,即使我检查的值赋给它之前:

fatal error: unexpectedly found nil while unwrapping an Optional value

+0

哪一行导致错误? – 2015-02-10 05:24:57

+0

我评论了错误所在的代码。第7行(包括评论)。谢谢。 – matcartmill 2015-02-10 05:26:22

+0

玩家[“名字”]你有这个领域的数据吗?你可以使用player [“name”]。stringValue在这种情况下,如果player [“name”] nil属性返回空字符串 – 2015-02-10 05:32:06

如果您使用SwiftyJSON,它看起来像你一样,那么它在保护零值的方面做得很好。这很可能是

如果声明PDATA为:

var pdata:NSMutableDictionary! 

那么这就是问题所在。你不是在创建一个字典,而是一个可选的字典。在某些时候,你必须实际创建字典。你可以在同一个地方简单地做:

var pdata = NSMutableDictionary() 

改为。

+0

哇。好像我错过了那样。感谢你的回答。 – matcartmill 2015-02-10 12:21:31

评论这个代码检查“名称”的价值,我认为问题可以在这部分代码if(self.pdata.count > 0) { self.playerList.insertObject(self.pdata, atIndex: i) self.pdata.removeAllObjects() i++ }