Ios 如何在不使用segue的情况下在视图控制器之间传递图像
我收到一个错误: 线程1:EXC_BAD_指令(代码=EXC_1386_INVOP,子代码=0x0) 尝试将从照片库中选择的图像传递到其他视图控制器时 源视图控制器-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
@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
forDisplayPassedImage
已连接到情节提要中。这是完全错误吗?我怀疑它还说了类似于致命错误:在展开可选值(lldb)
时意外发现nil,因为UIImageView
上的image
属性是可选的,您可以将passedVImage
设置为可选的,如var passedVImage:UIImage?
,这将使您的代码更加安全,并将减少执行VImageView.image的需要传入值时,源viewcontroller中的代码>。这有助于改善这种情况,您可以更轻松地观察正在传递的图像是否为nil
。不幸的是,您仍然不能在故事板中使用初始值设定项注入。迫使你多次陷入不安全的境地