Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在“didFinishPickingMediaWithInfo”之后推送到另一个控制器时崩溃`_Ios_Swift_Uiimagepickercontroller - Fatal编程技术网

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
行上遇到了一个崩溃“在展开可选值时意外发现零”previewImage在调试器中为零,但我不知道为什么-这不是在用户点击选择器中的“choose”时设置的吗


此处是否涉及其他步骤?

问题的主要原因是您试图过早访问视图控制器的出口。实例化视图控制器后,不会立即创建和分配视图控制器的视图和插座


试图从视图控制器外部的代码直接访问视图控制器的视图也是糟糕的设计。在这种情况下,正确的解决方案是添加一个可以设置的
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所说,您的回答根本没有解决崩溃问题。