prepareforsegue 后不传递值。 Swift

Value is not passed after prepareforsegue. Swift

VC 触发 perform segue。 它有一个 backgroundImage 和一个 userImage 以及一个 collectionView 和单元格中的图像。

import UIKit

class EmojiCollectionVC:  {

    @IBOutlet weak var backgroundImage: UIImageView!
    @IBOutlet weak var emojiCollection: UICollectionView!

    var userImage: UIImage!

    override func viewDidLoad() {
        super.viewDidLoad()

        backgroundImage.image = userImage
    }

    @IBAction func dismiss(_ sender: Any) {

         dismiss(animated: false, completion: nil)
    }

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

        let cell = collectionView.cellForItem(at: indexPath) as! EmojiCollectionCell
        let chosenEmoji = cell.emojiView.image
        performSegue(withIdentifier: "backToEmojiVC", sender: chosenEmoji)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "backToEmojiVC"{

        if let destinationVC = segue.destination as? EmojiVC {
            if let emoji = sender as? UIImage {
                destinationVC.emojiImage = emoji

                let data = UIImagePNGRepresentation(userImage)
                print("Zhenya: 1 - \(data)")
                destinationVC.imageData = data
                print("Zhenya: 5 - \(destinationVC.imageData)")
            }
        }
    }
    }
}

userImage 中显示了一张图片。 按下单元格后,来自它的图像 (chosenEmoji) 应该传递给 EmojiVC,传递给它的 emojiImage.

同时打印 "Zhenya: 1" 和 "Zhenya: 5" 在 prepare for segue 打印所需的值。

目的地VC:

class EmojiVC: UIViewController {

    @IBOutlet weak var mainImg: UIImageView!
    @IBOutlet weak var emojiImageView: UIImageView!

    var imageData: Data!
    var imageItself: UIImage!
    var emojiImage: UIImage!

    override func viewDidLoad() {
        super.viewDidLoad()

        print("Zhenya:3 - \(imageData)")
        print("Zhenya:4 - \(emojiImage)")

    }

    override func viewDidAppear(_ animated: Bool) {
        print("Zhenya:3 - \(imageData)")
        print("Zhenya:4 - \(emojiImage)")

        if imageData != nil {
            print("Zhenya:2 - \(imageData)")
            let img = UIImage(data: imageData)
            mainImg.image = img
        } else if imageItself != nil {
            mainImg.image = imageItself
        }

        if emojiImage != nil {
            print("Zhenya: \(emojiImage)")
            emojiImageView.image = emojiImage
        }

    }

    @IBAction func addEmoji(_ sender: Any) {
        let img = mainImg.image
        performSegue(withIdentifier: "EmojiCollectionVC", sender: img)

    }
}

同时打印 Zhenya: 3Zhenya: 4 打印 nilprepare for segue 中设置的数据未传递给他们。 执行了 Segue backToEmojiVC,但未传递数据。 我确实检查过 - 是否有任何其他具有相同标识符的转场。

我怀疑,当目的地 VC 出现时,该值在某处或以某种方式被破坏。或者 imageDataemojiImage 都用 nil 值重新初始化。

可能是什么问题?

逐步完成代码。复制粘贴的 segues 名称而不是键入它们。该死的开始工作了。