所以我想要做的就是通过didSelectRowAtIndexPath中的prepareForSegue方法的sender参数将一个对象从tableViewController发送到一个collectionViewController,但出于某种原因,在prepareForSegue之前,两次调用collectionViewController的viewDidLoad方法。下面是来自tableViewController相关代码:segue.destinationViewController在prepareForSegue()之前调用两次viewDidLoad()
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
}
}
加入一些下面的打印报表,之后是发生在序列:
- tableViewController的didSelectRowAtIndexPath方法被称为
- destinationViewController的(collectionViewController)viewDidLoad中被称为
- destinationViewController的(collectionViewController)viewDidLoad被再次调用
- tabl eViewController的prepareForSegue被称为
我不知道为什么会发生这种情况,将不胜感激任何帮助。
编辑 - 我用tableViewController替换了collectionViewController,并且一切似乎都正常,因此它可能与UICollectionViewController特别有关。
对不起,忘了提及 - 从viewController触发segue,以便发送者参数是设置“挑战”对象,而不是单元格也。所以那不是我害怕的。 –
如果使用performSegueWithIdentifier,IIRC应该执行SegueWithIdentifier不会被调用。仍然给它一个镜头,它无济于事,无论如何。 –
你能分享你的代码吗? – techloverr