我正在尝试使用该函数将数据传递给ViewController:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? ContactTableViewController
{
vc.invitationType = type
print(vc.invitationType)
}
}
它被称为好,我可以打印vc.invitationType
,因此变量已在新的VC中设置。
问题是何时发生。在新的视图控制器中,print(inv)
行没有执行,因为invitationType
是nil:
class ContactTableViewController: UITableViewController {
var invitationType: InvitationType?
override func viewDidLoad() {
super.viewDidLoad()
if let inv = invitationType {
print(inv)
}
}
}
谁能解释为什么会发生这种情况?
编辑:我以为我正在使用故事板上定义的segue,但是事实证明,我错误地使用了我的功能来实例化另一个ViewController:
let newVC = originVC.storyboard?.instantiateViewController(withIdentifier: viewcontroller) as! VC
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.rootViewController = newVC
因此,问题是我最终在一个实例中设置了变量invitationType
,然后将其转换为ContactTableViewController
的其他实例。
尝试一下,可能已经加载了view
,因此在将值设置为invitationType
:
viewDidLoad
class ContactTableViewController: UITableViewController {
var invitationType: InvitationType? {
didSet {
print(">>> already loaded (invitationType)")
}
}
override func viewDidLoad() {
super.viewDidLoad()
if let inv = invitationType {
print(inv)
}
}
}
从评论中,这两个ContactTableViewController
并不相同 - 您通过启用了另一个显示的视图控制器来弄乱segue。