使用 Alamofire 解析 json 时出现 AppDelegate 错误

Posted

技术标签:

【中文标题】使用 Alamofire 解析 json 时出现 AppDelegate 错误【英文标题】:Getting an AppDelegate Error while json parsing using Alamofire 【发布时间】:2017-05-03 11:24:53 【问题描述】:

从下面的代码中它没有显示任何错误,但它得到运行时 appDelegate 错误,其原因是由于未捕获的异常“NSInvalidArgumentException”而终止应用程序。请告诉我我想做什么来摆脱这个......

var urlstring: String!

     urlstring = "\(signInAPIUrl)rooms/room_type"
    urlstring = urlstring.replacingOccurrences(of: "Optional(", with: "")
    urlstring = urlstring.replacingOccurrences(of: ")", with: "")
    urlstring = urlstring.addingPercentEncoding( withAllowedCharacters: .urlQueryAllowed)!

    print(urlstring)
    self.callSiginGBAPI(url: "\(urlstring!)")
       
func callSiginGBAPI(url : String)

    print("url: \(url)")

    Alamofire.request(url).responseJSON  (response) in

        self.parseDataGB(JSONData: response.data!)

        print("Response:\(response)")

    


func parseDataGB(JSONData : Data)

    do

        let readableJSon = try JSONSerialization.jsonObject(with: JSONData, options: .mutableContainers) as! jsonSTD

        print(" !!! \(readableJSon[0])")

        let value = readableJSon[0] as AnyObject

        if let final = value.object(forKey: "id")
        
            print(final)

            let first_name:String = value.object(forKey: "id") as! String
            let last_name:String = value.object(forKey: "type") as! String
            let list_type:String = value.object(forKey: "list_type") as! String
            print(first_name)
            print(last_name)
            print(list_type)

         else
        
    
    catch

        print(error)

    


【问题讨论】:

会有更多的异常信息。还要设置一个异常断点来识别它在哪一行崩溃 【参考方案1】:

使用以下扩展将数据转换为 JSON 对象:

extension Data 
      func JSONObject() -> AnyObject? 
        do 
            let content = try JSONSerialization.jsonObject(with: self as Data, options: JSONSerialization.ReadingOptions.allowFragments)
            return content as AnyObject?
         catch _ as NSError 
            return nil
        
    

    var string: String 
        return String(data: self as Data, encoding: String.Encoding.utf8) ?? "Error: Not able to get string from the data."
    


回应

let info = response.data?.JSONObject() 

【讨论】:

以上是关于使用 Alamofire 解析 json 时出现 AppDelegate 错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 iOS 7 下使用 SwiftyJSON 解析 JSON 数据时出现未知类型

使用 Flickr API 时出现 Alamofire AFError

解析“......没有方法'replace'”时出现JSON错误

使用 Alamofire 和 PromiseKit 使用 Swift 时出现 Void 错误(请求)

解析 JSON 对象时出现 NoClassDefFoundError JsonAutoDetect

Javascript:解析 document.cookie JSON 对象时出现问题