Ios 在“didFinishPickingMediaWithInfo”之后推送到另一个控制器时崩溃`
我试图让应用程序在用户从选择器中选择照片后转到其他视图控制器Ios 在“didFinishPickingMediaWithInfo”之后推送到另一个控制器时崩溃`,ios,swift,uiimagepickercontroller,Ios,Swift,Uiimagepickercontroller,我试图让应用程序在用户从选择器中选择照片后转到其他视图控制器 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { if let image = info[UIImagePickerControllerEditedImage] as? UIImage { let previewControlle
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let image = info[UIImagePickerControllerEditedImage] as? UIImage {
let previewController = self.storyboard?.instantiateViewController(withIdentifier: "previewVC") as! PreviewViewController
previewController.previewImage.image = image
previewController.navigationItem.setHidesBackButton(true, animated: false)
self.navigationController?.pushViewController(previewController, animated: true)
}
}
previewController
只是有一个图像视图(@ibvar previewImage:UIImageView!
)和一个用于发布照片的按钮,所以我尝试将该图像视图设置为显示拾取的图像
但是,我在previewController.previewImage.image=image
行上遇到了一个崩溃“在展开可选值时意外发现零”此处是否涉及其他步骤?问题的主要原因是您试图过早访问视图控制器的出口。实例化视图控制器后,不会立即创建和分配视图控制器的视图和插座
试图从视图控制器外部的代码直接访问视图控制器的视图也是糟糕的设计。在这种情况下,正确的解决方案是添加一个可以设置的
UIImage
属性。然后让视图控制器在适当的时间(例如在viewdiload
中)基于该图像属性的值更新其自己的图像视图。问题的主要原因是您试图过早访问视图控制器的出口。实例化视图控制器后,不会立即创建和分配视图控制器的视图和插座
试图从视图控制器外部的代码直接访问视图控制器的视图也是糟糕的设计。在这种情况下,正确的解决方案是添加一个可以设置的
UIImage
属性。然后让视图控制器在适当的时间(例如在viewdiload
中)基于该图像属性的值更新其自己的图像视图。将此添加到函数中
dismiss(animated:true, completion: nil)
在完成中,您可以定义一个可以执行任何操作的闭包。将其添加到函数中
dismiss(animated:true, completion: nil)
在完成时,您可以定义一个可以执行任何操作的闭包。我添加了
var img:UIImage?
以预览控制器,并在didfishpickingmediawithinfo
中设置previewController.img=image
。然后在预览控制器的viewDidLoad中设置self.previewImage.image=img
。虽然现在没有崩溃,但当我点击选择器中的choose时,什么都不会发生。定义“什么都不会发生”。预览控制器是否已按下?当前视图控制器在导航控制器中吗?不,实际上什么都没有发生-没有崩溃,但是选择器上的“选择”和“取消”都不可点击。而且两个视图控制器都在导航控制器中。好的,看起来我需要调用self.discover(动画:true,完成:nil)
在self.navigationController?.pushViewController之后(预览控制器,动画:true)
。目前似乎正在工作,但正如您所说,这并不是最好/最有效的方法。我将var img:UIImage?
添加到preview controller中,并在didFinishPickingMediaWithInfo
中设置previewController.img=image
。然后在预览控制器的viewDidLoad中设置self.previewImage.image=img
。虽然现在没有崩溃,但当我点击选择器中的choose时,什么都不会发生。定义“什么都不会发生”。预览控制器是否已按下?当前视图控制器在导航控制器中吗?不,实际上什么都没有发生-没有崩溃,但是选择器上的“选择”和“取消”都不可点击。而且两个视图控制器都在导航控制器中。好的,看起来我需要调用self.discover(动画:true,完成:nil)
在self.navigationController?.pushViewController之后(预览控制器,动画:true)
。目前似乎正在发挥作用,但正如你所说,这并不是最好/最有效的解决方法。对于投票反对我的人,请你发表评论,以便我了解问题所在。我没有投票反对,但你的回答没有解决问题中的问题。你的答案是需要添加的代码,但它不能解决崩溃的直接问题。我对你投了反对票。就像@rmaddy所说的,你的回答根本没有解决崩溃问题。对于投票反对我的人,请你发表评论,让我知道问题所在。我没有投票反对,但你的回答没有解决问题中的问题。你的答案是需要添加的代码,但它不能解决崩溃的直接问题。我对你投了反对票。正如@rmaddy所说,您的回答根本没有解决崩溃问题。