繁体   English   中英

在prepareForSegue()之前调用了两次的segue.destinationViewController的viewDidLoad()

[英]viewDidLoad() of segue.destinationViewController called twice before prepareForSegue()

所以我想做的是通过didSelectRowAtIndexPath中的prepareForSegue方法的sender参数从tableViewController将对象发送到collectionViewController,但是由于某种原因,该collectionViewController的viewDidLoad方法在prepareForSegue之前被调用了两次。 这是tableViewController中的相关代码:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let challenge = dataModel.challenges[indexPath.row]
    performSegueWithIdentifier("ShowChallengeSegue", sender: challenge)
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    ...
    else if segue.identifier == "ShowChallengeSegue" {
        let controller = segue.destinationViewController as! ChallengeViewController
        controller.challenge = sender as! Challenge
    }
}

添加一堆打印语句后,依次发生以下情况:

  1. tableViewController的didSelectRowAtIndexPath被调用
  2. destinationViewController的(collectionViewController)viewDidLoad被调用
  3. 再次调用destinationViewController的(collectionViewController)viewDidLoad
  4. tableViewController的prepareForSegue被调用

我不知道为什么会这样,不胜感激。

编辑 -我用tableViewController替换了collectionViewController,并且看起来一切正常,因此可能与UICollectionViewController有关。

您必须从单元而不是整个控制器那里获取了segue,以便两次执行segue

请从控制器中获取密码,然后尝试

要么

添加此代码

override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool {
    return false;
}

@格沃齐·索科洛夫斯基

在情节提要中检查您的xib文件。 我认为您从按钮或任何其他视图链接了segue。 应该使用UIViewcontroller设置segue,然后可以调用performSegueWithIdentifier

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM