Alamofire,致命错误:在展开可选值时意外发现 nil

Posted

技术标签:

【中文标题】Alamofire,致命错误:在展开可选值时意外发现 nil【英文标题】:Alamofire, fatal error: unexpectedly found nil while unwrapping an Optional value 【发布时间】:2016-05-02 13:04:47 【问题描述】:

我正在开发我的应用程序,它在模拟器上运行良好。当我们在我的 iphone 上尝试时,它崩溃了,出现了 unwarping 错误。有什么想法吗?谢谢 error screenshot

 class connection
var url: String = ""
func connectServer(url:String,completionHandler: (jsonResponse: JSON) -> ())     
    Alamofire.request(.GET, url)
        .responseJSON  (response) in
            let json = JSON(response.result.value!)
            //        print(json) // works fine
            completionHandler(jsonResponse: json)
    

 func loadData()
    let cn = connection()
    let url = "http://localhost:3000/api/v1/patients/user_id/"+userID
    // Call function to connect server by API with specific url
    cn.connectServer(url)  (jsonResponse) in
        //Parsing JSON file
        for item in jsonResponse["patients"].arrayValue
            //pasring json
            
            

【问题讨论】:

原因是response.result.value!nil。很可能localhost 在设备上不可用。我猜 Alamofire 在发生错误时也会返回一个错误对象。始终先检查! 您应该始终考虑可选项可能为 nil 的可能性,因此编写错误处理逻辑来正确处理这种情况 - see this Q&A for ways of safely dealing with optionals. @vadian 你是对的。谢谢你的帮助。我试图打印出错误消息并说它无法连接到服务器。有什么解决方案可以让我的应用程序在 iphone 上运行良好,我的意思是仍然从 localhost 获取数据? 您的 iphone 将无法连接到 localhost。如果您在同一个网络上,您也许可以获取您计算机的 IP 地址并这样做。 【参考方案1】:

试试这个:

var url: String = ""
    func connectServer(url:String,completionHandler: (jsonResponse: JSON) -> ()) 
        Alamofire.request(.GET, url)
            .responseJSON  (response) -> Void in
                guard response.result.isSuccess else 
                    print("Error while fetching remote rooms: \(response.result.error)")
                    completion(nil)
                    return
                

                guard let value = response.result.value as? [String: AnyObject],
                    completionHandler(jsonResponse: value) else 
                        print("Malformed data received from fetchAllRooms service")
                        completion(nil)
                        return
                


        
    

【讨论】:

完成(nil)是什么意思?我试过了,但给了我一个未解决的标识符错误 如果让 value = response.result.value 替换为? [String: AnyObject] completionHandler(jsonResponse: value) 与您的 let json = JSON(response.result.value!)

以上是关于Alamofire,致命错误:在展开可选值时意外发现 nil的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire:在展开可选值时意外发现 nil

致命错误:在展开可选值时意外发现 nil - 为啥?

Swift 错误致命错误:在展开可选值时意外发现 nil

为啥我收到错误:致命错误:在展开可选值时意外发现 nil?

@IBInspectable 致命错误:在展开可选值时意外发现 nil

Swift:致命错误:在展开可选值时意外发现 nil