什么可能导致此错误?
突然之间,我突然出现以下错误。我已经重新安装了cocoapod,清理了构建文件夹,并且已经重新安装了该应用程序,但都没有修复错误。
ERROR:线程1:致命错误:展开一个可选值时意外发现nil
CODE:
let recoverUrl = "http://www.website.com/recover.php?email=\(emailData)&local=application"
let urlEncodedString = recoverUrl.replacingOccurrences(of: " ", with: "%20")
parseRecover(url: urlEncodedString)
//////////////
func parseRecover(url : String){ AF.request(url).responseJSON(completionHandler: { response in self.parseData(JSONData: response.data!) }) }
func parseData(JSONData : Data){
do {
var readableJSON = try JSONSerialization.jsonObject(with: JSONData, options: .mutableContainers) as! JSONObject
if let recoverJSON = readableJSON["Recover"] as? [JSONObject] {
for i in 0..<recoverJSON.count {
let JSON = recoverJSON[i]
let status = JSON["status"] as! String
let message = JSON["message"] as! String
if status == "Error" {self.Alert01("\(message)")}
else if status == "Success" { self.Alert02("\(message)") }
}}}
catch { print(error) }
}
错误发生在:
func parseRecover(url : String){ AF.request(url).responseJSON(completionHandler: { response in self.parseData(JSONData: response.data!) }) }
无法保证响应中包含数据,因此强行解压缩该值可能会导致崩溃。我建议您创建Decodable
类型来解析您的响应,并使用Alamofire的responseDecodable
方法来处理您的响应。
此外,即使您不采用Decodable
,responseJSON
已经使用Data
解析了您的响应JSONSerialization
,所以您只需访问response.result
即可查看输出。
response.data!
在这种情况下为nil
,请签出SwiftyJSON
-与Alamofire
完美配合的JSON解析器库>
参考:https://github.com/SwiftyJSON/SwiftyJSON#work-with-alamofire