【问题标题】:Keep getting fatal error: unexpectedly found nil while unwrapping an Optional value不断出现致命错误:在展开可选值时意外发现 nil
【发布时间】:2015-05-21 10:32:30
【问题描述】:

我不断收到致命错误:在解包 Optional 值时意外发现 nil,每当我选择完一张图片时

编辑版本 图像的价值在那里

更新2

【问题讨论】:

  • 在swift中你可以有或没有分号...

标签: ios swift uiimagepickercontroller


【解决方案1】:

首先将您的图像视图添加到您的视图控制器,然后您将看到您的输出。目前您无法看到您的输出,因为您没有将此图像视图添加到您的视图中。所以请做

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        imagePicked = UIImageView()
        imagePicked.frame = CGRectMake(100, 100, 100, 100)

        self.view.addSubview(imagePicked);
    }

    func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) {

    picker.dismissViewControllerAnimated(true, completion: nil)
    imagePicked!.image = image
}

发生这种情况是因为您在分配图像时没有分配您的 imagePicked。

希望对你有所帮助。

【讨论】:

  • 试过了,每次点击图片,它什么都不做,甚至不关闭图库。
  • @sinusGob 现在请我的整个方法它也会关闭视图。
  • 我用的正是这个。但同样的结果,这里会有什么问题?
  • 我在实现你的新代码时遇到很多错误,例如 Cannot find an initializer for type UIImageView
  • @sinusGob 现在请看。希望对你有帮助。
【解决方案2】:

imagePicked 为零。您在顶部声明它(var imagePicked : UIImageView!)。感叹号说:“嘿,这不会是零,我保证。”所以你沉默了所有编译警告和错误,但是......你从不实例化它,所以你违背了承诺。

在确实完成了选择带有信息的图像:

   if imagePicked == nil {
         //init and configure your imageView
         imagePicked = UIImageView(...)
   }

   //you can safely use it here...    

在顶部更改!到 ?

注意:初始化应该在任何人访问它之前的地方完成。也许在 viewDidLoad...

【讨论】:

    【解决方案3】:

    您遇到的第一个错误是因为您的 imagePicked 未初始化,而您正在为其分配一个图像。

    解决这个问题的方法就是初始化它。在viewdidLoad imagePickerController(_:didFinishPickingMediaWithInfo:) 中使用以下代码

    imagePicked = UIImageView(image: image)
    

    记得使用以下代码关闭 imagePicker

    picker.dismissViewControllerAnimated(true, completion: nil)
    

    要使图像可见,请将您案例中的图像视图 imagePicked 添加到视图中。为此,请在关闭 imagePicker 后添加以下代码

    imagePicked.frame = CGRectMake(0, 0, 100, 100) // Use values that you need
    self.view.addSubview(imagePicked)
    

    你的 imagePickerController(_:didFinishPickingMediaWithInfo:) 应该是这样的

    func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
        picker.dismissViewControllerAnimated(true, completion: nil)
        imagePicked = UIImageView(image: info[UIImagePickerControllerOriginalImage] as! UIImage)
        imagePicked.frame = CGRectMake(0, 0, 100, 100)  // whatever frame you want
        self.view .addSubview(imagePicked)
    }
    

    注意: - imagePickerController:didFinishPickingImage:editingInfo: 已弃用

    【讨论】:

      猜你喜欢
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      • 2020-09-19
      • 2016-01-08
      相关资源
      最近更新 更多