prepareForSegue什么时候被调用?

5

这是我的情况:我有两个视图控制器:viewControllerA和tableViewControllerB。在我的viewControllerA上,我有一个按钮。当它被按下时,它会调用

self.performSegueWithIdentifier("toControllerB", sender: self)

此外,我编写了一个prepareforSegue函数,代码如下:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if (segue.identifier == "toControllerB"){

        var controllerB = segue.destinationViewController as tableViewControllerB
        controllerB.event = self.event
    }

在我的tableViewControllerB中,我有一个函数看起来像下面这样

var event = nil
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    self.viewDidLoad()
    var cell = tableView.dequeueReusableCellWithIdentifier("controllerBCell") as? ControllerBCell ?? ControllerBCell()
    //some code
    print(event)
    return cell

}

当我运行我的应用程序时,似乎这个表格视图函数在ControllerA的prepareforSegue函数之前被调用。因此,“event”变量为空。因此,我想知道是否可能在ControllerB中在调用这个表格视图函数之前调用prepareforSegue函数?
谢谢。

1
为什么你在调用self.viewDidLoad()?通常它会自动调用。这是你自己的函数吗? - Shamas S
1
表视图函数不应在prepareForSegue之前被调用。prepareForSegue在新控制器实例化之后但视图加载之前被调用。你不应该在cellForRowAtIndexPath中自己调用viewDidLoad。 - rdelmar
你确定在 prepareForSegue 函数执行时,self.event 不是 nil 吗? - ad121
你们是对的,在 prepareForSegue 时,self.event 是 nil。我的错。 - AdamXiaotCao
1个回答

7
这里的链条大致如下:
  1. 首先调用prepareForSegue
  2. 然后调用viewDidLoad
  3. 接着调用cellForRowAtIndexPath
我猜问题出在你的代码行上。
self.viewDidLoad()

此函数会自动调用。我在本地测试了代码的其余部分,它可以正常工作。


1
prepareForSegue方法是在performSegue(withIdentifier:__)之前调用的吗?还是反过来呢? - bibscy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接