2014-12-05 16 views
1

夫特鑄造出於某種原因,這行代碼崩潰預先iPhone 6的設備:上預iPhone 6器械

var friendMatch = newDict.objectForKey("is_match") as Int 

字典是從JSON,我從端點接收生成。該JSON看起來是這樣的:

"is_match" = 1; 

我也試過:

var friendMatch: NSNumber = newDict.objectForKey("is_match") as NSNumber 

和應用程序仍然崩潰在該行。崩潰日誌是無益的。

enter image description here

爲什麼這是工作在iPhone 6和6+任何想法,而不是對舊設備?

+0

「崩潰日誌無益」不,它不是。 – matt 2014-12-05 19:44:40

回答

1
var friendMatch = newDict.objectForKey("is_match") as Int 

你不應該無條件地鑄造。有條件地轉換:

if let friendMatch = newDict.objectForKey("is_match") as? Int { 
    // ... 
} 

現在如果轉換失敗,您將不會崩潰。

+0

嘿馬特我剛剛發現它之前才意識到這一點!我認爲,因爲JSON鍵值不是一個對象,而是一個Int值,它總是至少初始化爲0。 – Spentak 2014-12-05 19:39:33

+1

其實它不是一個Int,它不會被初始化爲任何東西。這是一個可選的包裝AnyObject,這就是你所知道的。所以你在這裏做了很多假設 - 這個東西不是零,它可以解開來獲得一個AnyObject,並且這個AnyObject可以轉換爲一個Int。我不知道這一點,你們也不清楚。條件表達必要的警告...... :) – matt 2014-12-05 19:47:33

0

你可以添加更多的代碼嗎?這可能是因爲你沒有正確解碼JSON到字典中。

此外,使用文字語法,它更清晰,更易於閱讀。

newDict["is_match"] 

如果您正在閱讀的JSON罰款,然後將其投射到任何東西之前,嘗試添加一個println看裏面,或者斷點值。

println(newDict["is_match"]) 

帖子討論編輯:

嘗試:

var newInt = newDict["is_match"].toInt() 
+0

這些值是按照它們應該打印的。數據一切正常。它只是在我提到的設備上崩潰的代碼行上。 JSON只是一個整數值,而不是字符串格式或任何其他格式。 – Spentak 2014-12-05 19:31:25

+0

也許很粗魯,但我決心在這裏幫助你!也許試試,而不是使用as來投射,使用toInt?看到我編輯的答案。 – 2014-12-05 19:33:16