Так что я пытаюсь отправить объект из tableViewController в collectionViewController через параметр отправителя метода prepareForSegue в файле didSelectRowAtIndexPath, но по какой-либо причине Метод viewDidLoad этого набораViewController вызывается дважды перед тем, как подготовитьForSegue. Вот соответствующий код из tableViewController:viewDidLoad() of segue.destinationViewController, вызываемый дважды до подготовкиForSegue()
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
}
}
После добавления кучу заявлений распечатаны следующие происходит в следующей последовательности:
- didSelectRowAtIndexPath tableViewController, называется
- destinationViewController (в collectionViewController) viewDidLoad называется
- viewViewController (collectionViewController) viewDidLoad вызывается снова
- tabl eViewController's prepareForSegue называется
Я понятия не имею, почему это происходит, был бы признателен за любую помощь.
Редактировать - Я заменил collectionViewController на tableViewController, и все, кажется, работает нормально, поэтому это может быть связано с UICollectionViewController.
Извините, забыли упомянуть - segue запускается с viewController, так что параметр отправителя является установленным объектом «вызов», а не ячейкой. Так что я не боюсь. –
IIRC shouldPerformSegueWithIdentifier не вызывается, если используется функция performSegueWithIdentifier. Тем не менее, он сделал это, и это не поможет, спасибо. –
Вы можете поделиться своим кодом? – techloverr