iOS - 将对象添加到 NSMutableDictionary 导致崩溃
iOS - Adding objects to NSMutableDictionary causing crash
在我正在开发的应用程序中,我正在读取 JSON 文件。该文件包含玩家列表。每个球员都有一系列的属性。
我创建了一个可变数组和一个可变字典来存储数据。我正在尝试将字典存储到数组索引中。我正在尝试使用以下代码这样做:
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
评论此代码并检查“名称”值我认为问题可能出在这部分代码中if(self.pdata.count > 0) {
self.playerList.insertObject(self.pdata, atIndex: i)
self.pdata.removeAllObjects()
i++
}
如果您使用的是 SwiftyJSON(看起来您就是这样),那么它可以很好地防止出现 nil 值。很有可能
如果您将 pdata 声明为:
var pdata:NSMutableDictionary!
那么问题来了。您不是在创建字典,而是一个可选的。在某些时候,您必须实际创建字典。您可以通过以下方式在同一个地方完成:
var pdata = NSMutableDictionary()
相反。
在我正在开发的应用程序中,我正在读取 JSON 文件。该文件包含玩家列表。每个球员都有一系列的属性。
我创建了一个可变数组和一个可变字典来存储数据。我正在尝试将字典存储到数组索引中。我正在尝试使用以下代码这样做:
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
评论此代码并检查“名称”值我认为问题可能出在这部分代码中if(self.pdata.count > 0) {
self.playerList.insertObject(self.pdata, atIndex: i)
self.pdata.removeAllObjects()
i++
}
如果您使用的是 SwiftyJSON(看起来您就是这样),那么它可以很好地防止出现 nil 值。很有可能
如果您将 pdata 声明为:
var pdata:NSMutableDictionary!
那么问题来了。您不是在创建字典,而是一个可选的。在某些时候,您必须实际创建字典。您可以通过以下方式在同一个地方完成:
var pdata = NSMutableDictionary()
相反。