Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios segue.destinationViewController的viewDidLoad()在prepareForSegue()之前调用了两次_Ios_Iphone_Uiviewcontroller_Uistoryboardsegue - Fatal编程技术网

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

Ios segue.destinationViewController的viewDidLoad()在prepareForSegue()之前调用了两次,ios,iphone,uiviewcontroller,uistoryboardsegue,Ios,Iphone,Uiviewcontroller,Uistoryboardsegue,因此,我试图通过didSelectRowAtIndexPath中prepareForSegue方法的sender参数将对象从tableViewController发送到collectionViewController,但由于某种原因,该collectionViewController的viewDidLoad方法在prepareForSegue之前被调用了两次。以下是tableViewController中的相关代码: override func tableView(tableView: UITa

因此,我试图通过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
    }
}
在添加一组print语句后,将按顺序执行以下操作:

  • 调用tableViewController的DidSelectRowatineXpath
  • 调用destinationViewController的(collectionViewController)viewDidLoad
  • 再次调用destinationViewController的(collectionViewController)viewDidLoad
  • 调用tableViewController的prepareForSegue
  • 我不知道为什么会发生这种情况,如果有任何帮助,我将不胜感激


    编辑-我用tableViewController替换了collectionViewController,一切似乎都很正常,因此它可能与UICollectionViewController特别相关。

    您必须从单元而不是整个控制器中获取分段,以便分段执行两次

    请从控制器获取segue,然后重试

    添加此代码

    override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool {
        return false;
    }
    
    @格瓦齐·索科夫斯基


    在故事板中检查您的xib文件。我想你从按钮或任何其他视图链接了segue。segue应使用UIViewcontroller设置,然后您可以调用PerformsgueWithIdentifier

    抱歉,忘记提及-segue是从viewController触发的,因此发送方参数是设置的“质询”对象,而不是单元格。恐怕不是这样。如果使用performsguewithidentifier,则不会调用IIRC shouldPerformSegueWithIdentifier。仍然给了它一个镜头,但它没有帮助,无论如何,谢谢。双重检查-segue最肯定是从viewController本身触发的,而不是单元格或任何其他子视图。