为啥我在尝试在 iOS Swift 中向服务器发出 post 请求时收到此错误:在展开 Optional 值时意外发现 nil?

Posted

技术标签:

【中文标题】为啥我在尝试在 iOS Swift 中向服务器发出 post 请求时收到此错误:在展开 Optional 值时意外发现 nil?【英文标题】:Why I get this error while trying to make post request to a server in iOS Swift: unexpectedly found nil while unwrapping an Optional value?为什么我在尝试在 iOS Swift 中向服务器发出 post 请求时收到此错误:在展开 Optional 值时意外发现 nil? 【发布时间】:2016-01-02 15:40:12 【问题描述】:
 func uploadImage(var image:UIImage)

    var imageData = UIImagePNGRepresentation(image)
    let base64String = imageData!.base64EncodedStringWithOptions([.Encoding64CharacterLineLength]) 
    let parameters = [
        "img": base64String
    ]

    Alamofire.request(.POST, API_URL, parameters:parameters) .response 
        (request, response, data, error) in   
        

图像不为零。而且我找不到哪个值实际上是 nil。

【问题讨论】:

好吧,就像它说的,你的一些变量/常数是零。 imageData 是零吗?它是您在此处打开代码的唯一一个 您提到的image不是nil,我假设您在谈论参数image,请您调试一下从image中提取的imageData是有效还是nil值。如果是这种情况,在 nil 上调用 base64EncodedStringWithOptions 会导致问题 imageData 不是 nil :( 你 100% 确定吗?您是否添加了print 声明?请包括它崩溃的确切行,而不是“仅”给出错误消息。 Alamofire 发生了什么?还有什么叫uploadImage,图片来自哪里? 【参考方案1】:

imageData 可能为零。始终进行 nil 检查并避免展开。

func uploadImage(var image:UIImage) 
  if let imageData = UIImagePNGRepresentation(image), let base64String = imageData.base64EncodedStringWithOptions([.Encoding64CharacterLineLength]) 
    let parameters = [
      "img": base64String
    ]

    Alamofire.request(.POST, API_URL, parameters: parameters) .response 
      (request, response, data, error) in   
    
      

【讨论】:

imageData 不是 nil :( 我查过了。 那么你需要单步执行你的代码并检查它是什么,在这个函数的第一行设置一个断点并单步执行它。

以上是关于为啥我在尝试在 iOS Swift 中向服务器发出 post 请求时收到此错误:在展开 Optional 值时意外发现 nil?的主要内容,如果未能解决你的问题,请参考以下文章

为啥滑动手势识别器在 swift 中会出错?

为啥我在 iOS 上从 Swift 调用服务时收到 SSL 错误?

如何在 React Native 中向 API 发出 POST 请求?

如何在 Bluemix 中向节点应用程序发出 cors 请求

无法在 ember 中向后端服务器发出请求(错误:'No Access-Control-Allow-Origin')

在 Swift 中向用户显示网络错误消息