gpt4 book ai didi

ios - CollectionView Segue 在接收 ViewController 时发现 nil

转载 作者:行者123 更新时间:2023-11-28 11:58:57 25 4
gpt4 key购买 nike

我有一个 Collection View ,它在其索引中选择一个项目并执行到下一个 ViewController 的 segue。当出现下一个 ViewController 时,我的对象的值为 nil

这是在 collectionView 中的调用:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
guard let adViewVC = storyboard?.instantiateViewController(withIdentifier: adViewPageID) as? AdViewPageVC else {return}
let adChoice = adArray[indexPath.row]
adViewVC.advertisement = adChoice
performSegue(withIdentifier: adViewPageSegue, sender: self)
}

注意 guard 语句正在执行,如果我从 adArray 打印一个值,它在此函数中具有值。

在我执行打开正确 ViewController 的 segue 之后,广告对象始终为 nil。

var advertisement : Advertisement!

override func viewDidLoad() {
super.viewDidLoad()

let title = advertisement.title
print(title)

}

即使在 Collection View 的 didSelectItem 函数赋值期间我可以看到它具有值,这也永远不会获取对象的值。

我在这里错过了什么?

最佳答案

当用户点击 collectionViewCell 时,应用程序应该使用 indexPath 作为发件人执行 segue:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
performSegue(withIdentifier: adViewPageSegue, sender: indexPath)
}

并在 prepare(for:sender:) 方法中准备所有必要的东西。而且您不必从 Storyboard 中初始化 viewController。 segue.destination 就足够了。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let identifier = segue.identifier {
if identifier == adViewPageSegue {
guard let adViewVC = segue.destination as? AdViewPageVC else {return}
let indexPath = sender as! IndexPath
let adChoice = adArray[indexPath.row]
adViewVC.advertisement = adChoice
}
}
}

关于ios - CollectionView Segue 在接收 ViewController 时发现 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50401803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com