【问题标题】:Alamofire, fatal error: unexpectedly found nil while unwrapping an Optional valueAlamofire,致命错误:在展开可选值时意外发现 nil
【发布时间】: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 地址并这样做。

标签: swift null alamofire


【解决方案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!)
猜你喜欢
  • 2016-01-26
  • 2016-02-29
  • 2020-09-19
  • 2016-01-08
相关资源
最近更新 更多