let JsONDictionary: Dictionary = NSJsONSerialization.JsONObjectWithData(JsONData!,options: nil,error: &error) as NSDictionary
这行代码是给我问题的代码,它会抛出一个BAD_EXEC_INSTRUCTION.
我的问题:如何将JsON转换为NSDictionary?
解决方法 您的代码不会执行任何错误处理.但它可以(并且如果这些数据来自Web服务,将会以多种方式失败).>您必须确保您的数据对象确实存在
>您必须确保数据对象可以转换为JsON
>您必须确保JsON实际上包含一个Dictionary
您应该使用Swifts条件转换和它的可选绑定功能.
如果让JsONData = JsONData检查JsONData不是nil,则可选绑定.如果无法接收数据,您使用的强制解包(JsONData!)可能会崩溃.
如果让Json = NSJsONSerialization.JsONObjectWithData检查数据是否可以转换为JsON对象,则可选绑定.条件演员为? NSDictionary检查JsON对象是否实际上是字典.您目前不使用这些检查,将对象强制转换为NSDictionary.如果对象无效Json,或者它不是字典,那么会崩溃.
我会推荐这样的东西:
var error: NSError?if let JsONData = JsONData { // Check 1 if let Json: AnyObject = NSJsONSerialization.JsONObjectWithData(JsONData,error: &error) { // Check 2 if let JsonDictionary = Json as? NSDictionary { // Check 3 println("Dictionary received") } else { if let JsonString = Nsstring(data: JsONData,enCoding: NSUTF8StringEnCoding) { println("JsON String: \n\n \(JsonString)") } fatalError("JsON does not contain a dictionary \(Json)") } } else { fatalError("Can't parse JsON \(error)") }}else { fatalError("JsONData is nil")}
您可以将check 2和3合并为一行,并检查NSJsONSerialization是否可以直接创建NSDictionary:
var error: NSError?if let JsONData = JsONData { // Check 1. if let JsONDictionary = NSJsONSerialization.JsONObjectWithData(JsONData,error: &error) as? NSDictionary { // Check 2. and 3. println("Dictionary received") } else { if let JsonString = Nsstring(data: JsONData,enCoding: NSUTF8StringEnCoding) { println("JsON: \n\n \(JsonString)") } fatalError("Can't parse JsON \(error)") }}else { fatalError("JsONData is nil")}
确保在生产代码中使用适当的错误处理替换fatalError
总结以上是内存溢出为你收集整理的ios – 带有Swift的NSDictionary的JSON字符串全部内容,希望文章能够帮你解决ios – 带有Swift的NSDictionary的JSON字符串所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)