2014-12-05 17 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