2016-03-07 4 views
0

Так что я пытаюсь отправить объект из 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 
    } 
} 

После добавления кучу заявлений распечатаны следующие происходит в следующей последовательности:

  1. didSelectRowAtIndexPath tableViewController, называется
  2. destinationViewController (в collectionViewController) viewDidLoad называется
  3. viewViewController (collectionViewController) viewDidLoad вызывается снова
  4. tabl eViewController's prepareForSegue называется

Я понятия не имею, почему это происходит, был бы признателен за любую помощь.

Редактировать - Я заменил collectionViewController на tableViewController, и все, кажется, работает нормально, поэтому это может быть связано с UICollectionViewController.

ответ

0

вы должны взяли SEGUE из клетки, а не всего контроллера, так что переход выполняется дважды

Пожалуйста SEGUE от контроллера попробуйте

ИЛИ

добавить этот код

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

Извините, забыли упомянуть - segue запускается с viewController, так что параметр отправителя является установленным объектом «вызов», а не ячейкой. Так что я не боюсь. –

+0

IIRC shouldPerformSegueWithIdentifier не вызывается, если используется функция performSegueWithIdentifier. Тем не менее, он сделал это, и это не поможет, спасибо. –

+0

Вы можете поделиться своим кодом? – techloverr

0

@ Gerwazy Sokołowski

Проверьте свой xib-файл в раскадровке. я думаю, вы связали segue с кнопкой или любым другим видом. segue должен быть установлен с помощью UIViewcontroller, тогда вы можете вызвать performSegueWithIdentifier

+0

Двойная проверка - segue наиболее определенно запускается из самого viewController, а не из ячейки или любого другого подзаголовка. –

Смежные вопросы