gpt4 book ai didi

swift - 对象是 nil,尽管它是在 init 中设置的

转载 作者:可可西里 更新时间:2023-11-01 02:05:05 25 4
gpt4 key购买 nike

我有一个名为 navigator 的对象,我在 init 中设置了它。我打开它以确保它已设置好。但是,当 IBAction 函数 linkBut​​tonClicked 被调用并尝试使用导航器时,我得到一个 nil 异常。为什么?

class HomeCollectionViewCell: UICollectionViewCell {
let appDelegate:AppDelegate!
let navigator: Navigator!
@IBOutlet weak var linkButton: UIButton!
var destinationView:String?
var parentViewController:UIViewController?

@IBAction func linkButtonClicked(_ sender: Any) {
do {
try self.navigator.navigate(to: self.destinationView!, from: parentViewController!)
} catch {

}
}

required init?(coder aDecoder: NSCoder) {
self.appDelegate = UIApplication.shared.delegate as! AppDelegate
self.navigator = self.appDelegate.navigator

super.init(coder: aDecoder)
}

override func prepareForReuse() {
super.prepareForReuse()

// do resetting here if needed, like empty out data
linkButton.setTitle(nil, for: .normal)
}
}

最佳答案

init?(coder: NSCoder) 初始化器在您从某种编码存储(例如 Core Data)中检索对象时使用。此初始化程序是 NSCoding 协议(protocol)所必需的,并且用于反序列化对象。因此,它不会在对象创建时被调用。只有当您使用 NSCoding 序列化对象并稍后反序列化它时,它才会被调用。

为了确保在您的 View 中设置某些值,您想要覆盖的函数不是它的init(如果您真的想使用它的init,重载的方法是init(frame:))。相反,您应该在 View Controller 的 viewDidLoad 方法中设置任何您希望可用的变量。

关于swift - 对象是 nil,尽管它是在 init 中设置的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43563131/

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