2015-02-10 113 views
0

在我正在開發的應用程序中,我正在閱讀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

回答

0

如果您使用SwiftyJSON,它看起來像你一樣,那麼它在保護零值的方面做得很好。這很可能是

如果聲明PDATA爲:

var pdata:NSMutableDictionary! 

那麼這就是問題所在。你不是在創建一個字典,而是一個可選的字典。在某些時候,你必須實際創建字典。你可以在同一個地方簡單地做:

var pdata = NSMutableDictionary() 

改爲。

+0

哇。好像我錯過了那樣。感謝你的回答。 – matcartmill 2015-02-10 12:21:31

0

評論這個代碼檢查「名稱」的價值,我認爲問題可以在這部分代碼if(self.pdata.count > 0) { self.playerList.insertObject(self.pdata, atIndex: i) self.pdata.removeAllObjects() i++ }