gpt4 book ai didi

ios - 为什么 JSON 解析器没有捕获未经验证的数据?

转载 作者:行者123 更新时间:2023-11-28 09:18:39 25 4
gpt4 key购买 nike

我偶尔遇到致命崩溃:EXC_BAD_INSTRUCTION

这可能会在几次迭代后发生。

我已将崩溃的根源追溯到(我认为是)NSJSONSerialization 解析器未经验证的字符串 --> 数据。

也就是说,它适用于几次迭代(退出、重新启动应用程序并再次运行);然后崩溃。清理模拟器并重建...模式重复。

我通过在 JSON 调用之前执行 println(string) 发现了这一点;并将字符串剪切/粘贴到 JSON 验证器中,发现 errant '(' 在开头 :

({"photos":{"page":1,"pages":1340,.....

这是实际的屏幕转储:

enter image description here

问题:为什么 JSON 解析器没有在 NSError 中捕获此错误,而是抛出一个 fatal exception
...这是一个错误吗?

最佳答案

您正在强行展开从 NSJSONSerialization.JSONObjectWithData() 返回的对象,但如果发生解析器错误,它将为 nil。发生这种情况时,您会因运行时错误而崩溃。

由于根本不看jsonError的内容,所以可以忽略error参数,改用optional binding;例如

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

关于ios - 为什么 JSON 解析器没有捕获未经验证的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26266988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com