如何在不使用segue的情况下在视图控制器之间传递图像

时间:2016-12-28 13:14:05

标签: ios swift swift3

我收到错误

  

主题1:EXC_BAD_INSTRUCTION(代码= EXC_1386_INVOP,子代码= 0x0)

尝试将从Photo库中选择的图像传递给另一个视图控制器时。

源ViewController -

@IBAction func myButtonTapped(_ sender: UIButton) 
   {
        let secondVC = storyboard?.instantiateViewController(withIdentifier: "secondVC") as! secondVC
        secondVC.passedVName = VNameTextField.text!
        secondVC.passedCcName = DropTextBox.text!
        secondVC.passedVImage = VImageView.image! 
        navigationController?.pushViewController(secondVC, animated: true)

    }

目的地ViewController -

 class secondVC: UIViewController 
    {
        @IBOutlet weak var DisplayPassedImage: UIImageView!
        @IBOutlet weak var ccNameDisplayLabel: UILabel!
        @IBOutlet weak var VNameDisplayLabel: UILabel!
        var passedVName = ""
        var passedCcName = ""
        var passedVImage = UIImage() 
        override func viewDidLoad() 
            {
            super.viewDidLoad()
            VNameDisplayLabel.text = passedVName
            ccNameDisplayLabel.text = passedCcName
            DisplayPassedImage.image = passedVImage // Error- Thread 1:EXC_BAD_INSTRUCTION(code=EXC_1386_INVOP,subcode=0x0)
            }
    }

注意:' PassedVName'并且'传递了CcName'数据已成功传递到目标ViewController。如果我试图通过传递的VImage',我会收到错误。

2 个答案:

答案 0 :(得分:1)

您可以使用NotificationCenter将操作/消息传递给任何viewController。在这里,你需要在UIImage中取AppDelegate个对象(全局意味着),这样你就可以在任何地方传递它。

实施例
1)你是第一个VC 2)在firstVC中选择图像并将此图像添加到您在AppDelegate中拍摄的图像对象中 3)在firstVC中发布您希望通过行动的通知
4)在SecondVC上添加观察
5)您可以从AppDelegate对象(全局对象)获取图像。

否则您可以使用协议

答案 1 :(得分:0)

根据我对您的有限经验,应将.jpg更改为.png图片