Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.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 如何在不使用segue的情况下在视图控制器之间传递图像_Ios_Swift_Swift3 - Fatal编程技术网

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

Ios 如何在不使用segue的情况下在视图控制器之间传递图像,ios,swift,swift3,Ios,Swift,Swift3,我收到一个错误: 线程1:EXC_BAD_指令(代码=EXC_1386_INVOP,子代码=0x0) 尝试将从照片库中选择的图像传递到其他视图控制器时 源视图控制器- @IBAction func myButtonTapped(_ sender: UIButton) { let secondVC = storyboard?.instantiateViewController(withIdentifier: "secondVC") as! secondVC

我收到一个错误

线程1:EXC_BAD_指令(代码=EXC_1386_INVOP,子代码=0x0)

尝试将从照片库中选择的图像传递到其他视图控制器时

源视图控制器-

@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)

    }
 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)
            }
    }
目标视图控制器-

@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)

    }
 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”和“passedCcName”数据已成功传递到目标ViewController。如果我试图通过'passedVImage',我会得到一个错误

您可以使用
通知中心
将操作/消息传递给任何viewController。在这里,您需要在
AppDelegate
中获取
UIImage
对象(表示全局),以便将其传递到任何位置

例如
1) 您在firstVC
2) 在第一个VC中,选择图像并将此图像添加到您在
AppDelegate

3) 在firstVC中发布您希望通过操作的通知
4) 在第二个VC中添加观察
5) 您可以从
AppDelegate
对象(全局对象)获取图像


否则您可以使用协议

在我有限的经验中,您应该将
.jpg
更改为
.png
图像

不是答案,只是建议:不要在属性和变量名中以大写字母开头。VImageView.image读起来像是VImageView类的类属性。它使阅读代码变得更加困难,坚持给定语言的通用样式为什么要传递图像?如果您有图像,则将图像名称传递给另一个ViewController;如果您没有图像(如果您有图像URL),则将图像路径传递给另一个ViewController。请进行双重检查,以确保您的
@IBOutlet
for
DisplayPassedImage
已连接到情节提要中。这是完全错误吗?我怀疑它还说了类似于
致命错误:在展开可选值(lldb)
时意外发现nil,因为
UIImageView
上的
image
属性是可选的,您可以将
passedVImage
设置为可选的,如
var passedVImage:UIImage?
,这将使您的代码更加安全,并将减少执行
VImageView.image的需要。这有助于改善这种情况,您可以更轻松地观察正在传递的图像是否为
nil
。不幸的是,您仍然不能在故事板中使用初始值设定项注入。迫使你多次陷入不安全的境地