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

时间:2015-02-10 05:19:43

标签: ios swift nsmutablearray nsmutabledictionary

在我开发的应用程序中,我正在阅读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

2 个答案:

答案 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()

代替。