通过函数准备for segue将数据传递给ViewController

时间:2018-02-06 12:12:31

标签: ios swift null

我正在尝试使用以下函数将数据传递给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的另一个实例。

1 个答案:

答案 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。