一次&我得到了 fatal crash: EXC_BAD_INSTRUCTION
。
这可能在几次迭代后发生。
我已经跟踪了崩溃的来源(我认为是) NSJSONSerialization
解析器碰巧得到了非-validated string - >数据。
也就是说,它适用于几次迭代(退出,重新启动应用程序并再次运行);然后崩溃了。清理模拟器&重建...模式重复。
我通过在JSON调用之前执行 println(string)
来发现这一点;并将字符串剪切/粘贴到JSON验证器中,并在开头找到 错误 '('
:
({"photos":{"page":1,"pages":1340,.....
这是实际的屏幕转储:
问题:为什么JSON解析器没有在 NSError
中捕获此错误,而不是 fatal exception
?
......这是一个错误吗?
答案 0 :(得分:0)
您强行解开从NSJSONSerialization.JSONObjectWithData()
返回的对象,但如果发生解析器错误,它将为nil。发生这种情况时,会因运行时错误而崩溃。
由于您根本不查看jsonError的内容,因此可以忽略error参数并使用可选绑定; e.g。
if let JSONDict = NSJSONSerialization.JSONObjectWithData(data!,
options: .AllowFragments,
error: nil) as NSDictionary {
// do something with JSONDict
} else {
println("error")
return
}
如果您确实想检查错误对象,可以这样写:
let JSONDict = NSJSONSerialization.JSONObjectWithData(data!,
options: .AllowFragments,
error: &jsonError) as NSDictionary?
if JSONDict == nil {
if let err = jsonError {
println(err.localizedDescription)
}
return
}
// Do something with JSONDict