我正在尝试使用以下函数将数据传递给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中设置变量。
问题是当segue发生时。在新视图控制器中,行print(inv)
未被执行,因为invitationType
为零:
class ContactTableViewController: UITableViewController {
var invitationType: InvitationType?
override func viewDidLoad() {
super.viewDidLoad()
if let inv = invitationType {
print(inv)
}
}
}
任何人都可以解释为什么会这样吗?
编辑: 我以为我正在使用在Storyboard中定义的segue,但事实证明,我错误地使用了我的一个函数来实例化另一个ViewController:
let newVC = originVC.storyboard?.instantiateViewController(withIdentifier: viewcontroller) as! VC
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.rootViewController = newVC
所以问题是我最终在一个实例中设置了变量invitationType
并且转而使用ContactTableViewController
的另一个实例。
答案 0 :(得分:2)
尝试此操作,可能此时已加载view
,因此在将值设置为viewDidLoad
之前调用了invitationType
:
class ContactTableViewController: UITableViewController {
var invitationType: InvitationType? {
didSet {
print(">>> already loaded \(invitationType)")
}
}
override func viewDidLoad() {
super.viewDidLoad()
if let inv = invitationType {
print(inv)
}
}
}
从评论那两个ContactTableViewController
不一样 - 你通过实例化另一个呈现的视图控制器以某种方式弄乱了segue。