使用 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 错误(请求)