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

Posted

技术标签:

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

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

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

更新2

【问题讨论】:

在swift中你可以有或没有分号... 【参考方案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: 已弃用

【讨论】:

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

swift 2 致命错误:在展开可选值时意外发现 nil - 类别名称

致命错误:使用 cloudkit 展开可选值时意外发现 nil

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

NSString 到 String 抛出“致命错误:在展开可选值时意外发现 nil”

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

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