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: 3
和 Zhenya: 4
打印 nil
。 prepare for segue
中设置的数据未传递给他们。
执行了 Segue backToEmojiVC
,但未传递数据。
我确实检查过 - 是否有任何其他具有相同标识符的转场。
我怀疑,当目的地 VC 出现时,该值在某处或以某种方式被破坏。或者 imageData
和 emojiImage
都用 nil
值重新初始化。
可能是什么问题?
逐步完成代码。复制粘贴的 segues 名称而不是键入它们。该死的开始工作了。
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: 3
和 Zhenya: 4
打印 nil
。 prepare for segue
中设置的数据未传递给他们。
执行了 Segue backToEmojiVC
,但未传递数据。
我确实检查过 - 是否有任何其他具有相同标识符的转场。
我怀疑,当目的地 VC 出现时,该值在某处或以某种方式被破坏。或者 imageData
和 emojiImage
都用 nil
值重新初始化。
可能是什么问题?
逐步完成代码。复制粘贴的 segues 名称而不是键入它们。该死的开始工作了。