你可以在下面找到我们使用的代码
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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)