在`didFinishPickingMediaWithInfo`之后推送到另一个控制器时发生崩溃
我试图让用户从select器中select一张照片后,应用程序转到不同的视图控制器。
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
只是有一个图像视图( @IBOutlet weak var previewImage: UIImageView!
图像@IBOutlet weak var previewImage: UIImageView!
)和一个button来张贴照片,所以我试图设置图像视图来显示select的图像。
不过,我在previewController.previewImage.image = image
行中发生了一个崩溃,意外地发现了“当展开一个可选值时发现了nil”。 previewImage
中的previewImage在debugging器中为零,但我不确定为什么 – 只要用户在select器中select“choose”,是不是被设置?
这里涉及到另一个步骤吗?
问题的主要原因是您尝试访问视图控制器的sockets太早。 视图控制器的视图和sockets不是在实例化视图控制器后立即创build和分配的。
试图从该视图控制器之外的代码直接访问视图控制器的视图也是一个糟糕的devise。 在这种情况下,适当的解决scheme是添加可以设置的UIImage
属性。 然后让视图控制器在适当的时候根据该图像属性的值更新自己的图像视图(如viewDidLoad
)。
添加到您的function
dismiss(animated:true, completion: nil)
在完成时,你可以定义一个闭包,做任何你想要的。
- 使用makeObjectsPerformSelector:withObject:with false boolean
- Label不显示scrollView中的所有文本
- iOS – Alamofire v2 Basic Auth无法正常工作
- 如何改变中心点击在iphone左侧的控制器的tableview行?(MFSideMenu)
- void _UIPerformResizeOfTextViewForTextContainer中的断言失败
- 使用dispatch_async在Swift中同时分析一个数组
- 警卫声明迅速
- button显示图像和文字
- IOS应用程序 – 在同一时间多个赛格崩溃(去其他赛格,而一个是animation)