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的主要内容,如果未能解决你的问题,请参考以下文章