不断出现致命错误:在展开可选值时意外发现 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
NSString 到 String 抛出“致命错误:在展开可选值时意外发现 nil”