АВАРИЙНО ТРИГГЕРИРУЕТ ОДИН И ТОТ ЖЕ СЕМЬ ДВАЖДЫ Один раз в коде и один раз из конструктора интерфейса, но оба одновременно ...
Я получаюта же ошибка, что и у вас.Единственная моя проблема заключалась в том, что я случайно запускал одну и ту же передачу дважды.Один раз из конструктора интерфейса и один раз из моего кода.
У меня есть UITableView.Когда ячейка выбрана, возникает ошибка в построителе интерфейса.Вот моя проблема, я настроил segu для непосредственного запуска, щелкнув CELL ITSELf, внутри конструктора интерфейса, а затем в моем коде, который я имел под didSelectRowAtIndexPath, код, который будет запускать ту же самую передачу ... вот так ...
[self performSegueWithIdentifier:@"MySegue" sender:tableView];
Это означает, что когда didSelectRowAtIndexPath вызывается из-за того, что строка была выбрана, она запускает переход с указанной строкой кода.Затем конструктор интерфейса также запускает переход, потому что он напрямую связан с объектом ячейки в конструкторе интерфейса.Чтобы не допустить непосредственного запуска конструктора интерфейса.Вы должны подключить переход сверху контроллера вида, а не вкладываться внутрь, выходя из самой ячейки.
Так что если у вас возникла эта проблема по той же причине, что и у меня, то есть вывызывая один и тот же segue дважды, вы можете исправить это, отсоединив соединение от CELL DIRECTLY от вашего segue, и установив соединение segue, которое происходит в верхней части иерархии таблиц в IB, а не во вложенной ячейке.Подключите переход от самого View Controller к переходу.Если вы сделали это правильно, то при выборе перехода следует выделить ВЕСЬ вид, из которого он исходит, а не только ячейку.
Теперь документация Apples, таким образом, находится под executeSegueWithIdentifier: sender: reference:
Обычно приложениям не нужно запускать сегменты напрямую.Вместо этого вы настраиваете объект в Интерфейсном Разработчике, связанный с контроллером представления, такой как элемент управления, встроенный в его иерархию представления, для запуска перехода.Однако вы можете вызвать этот метод, чтобы программно инициировать переход, возможно, в ответ на какое-то действие, которое нельзя указать в файле ресурсов раскадровки.Например, вы можете вызвать его из обработчика настраиваемых действий, используемого для обработки событий встряхивания или акселерометра.
В моем случае у меня есть кнопка поиска для моего UITableView, и вызывается ли segue, когда таблица результатов поискаприсутствует, или присутствует нормальное табличное представление, должен быть определен.Поэтому мне нужно было напрямую запустить переход.
Итак, удалите встроенный элемент управления из компоновщика интерфейса и просто прикрепите его к самому контроллеру представления, а затем запустите переход в своем коде!
Теперь,нет больше двойных сегментов!И больше никаких ошибок.
Надеюсь, это поможет, у меня ушло несколько часов на то, чтобы заняться этим.