Swift,NSJSONSerialization和NSError

Swift,NSJSONSerialization和NSError,第1张

概述问题是当有不完整的数据NSJSONSerialization.JSONObjectWithData崩溃的应用程序给意外地找到了零,同时解开一个可选的值错误,而不是通知我们使用NSError变量.所以我们无法防止崩溃. 你可以在下面找到我们使用的代码 var error:NSError? = nil let dataToUse = NSJSONSerialization.JSONObj 问题是当有不完整的数据NSJsONSerialization.JsONObjectWithData崩溃的应用程序给意外地找到了零,同时解开一个可选的值错误,而不是通知我们使用NSError变量.所以我们无法防止崩溃.

你可以在下面找到我们使用的代码

var error:NSError? = nil      let dataToUse = NSJsONSerialization.JsONObjectWithData(receivedData,options:   NSJsONReadingOptions.AllowFragments,error:&error) as NSDictionary    if error != nil { println( "There was an error in NSJsONSerialization") }

到目前为止,我们无法找到工作.

问题是您之前投射JsON反序列化的结果
检查错误.如果JsON数据无效(例如不完整)则
NSJsONSerialization.JsONObjectWithData(...)

返回零和

NSJsONSerialization.JsONObjectWithData(...) as NSDictionary

会崩溃

这是一个正确检查错误情况的版本:

var error:NSError? = nilif let JsonObject: AnyObject = NSJsONSerialization.JsONObjectWithData(receivedData,options: nil,error:&error) {    if let dict = JsonObject as? NSDictionary {        println(dict)    } else {        println("not a dictionary")    }} else {    println("Could not parse JsON: \(error!)")}

备注:

>检查错误的正确方法是测试返回值,而不是
错误变量.
> JsON阅读选项.AllowFragments在这里没有帮助.设置此选项
只允许例如不是NSArray或NSDictionary的实例的顶级对象

{ "someString" }

你也可以在一行中做一个可选的转换:

if let dict = NSJsONSerialization.JsONObjectWithData(receivedData,error:nil) as? NSDictionary {    println(dict)} else {    println("Could not read JsON dictionary")}

缺点是在其他情况下,您无法区分是否阅读JsON数据失败或JsON不代表字典.

总结

以上是内存溢出为你收集整理的Swift,NSJSONSerialization和NSError全部内容,希望文章能够帮你解决Swift,NSJSONSerialization和NSError所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1046720.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存