Подтвердить что ты не робот

PerformSegueWithIdentifier не имеет идентификатора с идентификатором

Во время тестирования моего приложения я столкнулся с сбоем. Следующее изображение - это раскадровка:

storyboard

У меня есть код в View Controller:

@IBAction func unwindToHomeScreen(segue:UIStoryboardSegue) {

}

В представлении "Добавить новый элемент" есть кнопка "Отмена", которую я контролировал - перетащите ее на значок "Выход" вверху и ссылку на unwindToHomeScreen, он отлично работает.

В "Добавить новый элемент" есть класс AddTableViewController и код, который я написал внутри:

@IBAction func save() {
    // Execute the unwind segue and go back to the home screen
    performSegueWithIdentifier("unwindToHomeScreen", sender: self)
}

Я контролировал - перетащил кнопку "Сохранить" на функцию, но при авариях приложения, когда я нажимаю кнопку

Я могу использовать dismissViewControllerAnimated(true, completion: nil) вместо этого, но мне просто интересно, почему performSegueWithIdentifier не может работать?

Я прочитал код dropbox.com/s/hpybgg9x67rtqng/foodpinstatictable.zip?dl=0 и попытаюсь сделать его и используя performSegueWithIdentifier, как этот пример для практики, я не сделал см. идентификатор segue на ней, в чем разница?

4b9b3361

Ответ 1

Фактически вы не указали этот идентификатор. unwindToHomeScreen - это функция, которую вы можете вызвать; то, что вы ищете, является вашим идентификатором segue, который установлен в Interface Builder следующим образом:

Set an identifier

В этом примере у меня есть кнопка, подключенная к следующему представлению через Interface Builder, как вы описываете ( "Interface Builder" ), и кнопку, которая подключена к этому IBAction в моем контроллере представления ( "Programmatically" ):

@IBAction func goToNextView(sender: UIButton!) {
    self.performSegueWithIdentifier:("go", sender: self)
}

В любом случае, вам не хватает фактического идентификатора, который может быть установлен в атрибутах segue, созданных в Interface Builder.

Ответ 2

Я обнаружил, что, поскольку я переименовал свой контроллер представления, мне нужно было удалить и воссоздать segue.

Ответ 3

в моем случае измените порядок вставки в

Контроллер панели вкладок Контроллер навигации vc (содержит кнопку - нажатие кнопки инициирует переход "show, например push")

Слишком исправить заголовок в панели навигации

Ответ 4

Возможная проблема с iOS 12 и более ранними версиями (iOS 13, похоже, не страдает от той же проблемы) может быть связана с тем, что executeSegue (withIdentifier:, sender :) вызывается из обратного вызова view viewididLoad() контроллера контроллера.

Вы обязательно должны вызвать его из обратного вызова viewDidAppear (_ animated: Bool), чтобы избежать упомянутого вопроса сбоя.

Это, безусловно, сэкономит часы стрижки волос...

Ответ 5

Свифт 4:

Иногда мы должны очистить папку сборки, а затем повторить попытку: =)

Работал для меня после Ctrl-перетаскивания нового сегмента и присвоения ему имени, а затем использовал его программно как:

        performSegue(withIdentifier: "goToMyNewViewController", sender: self)

Ответ 6

для меня → нажмите на ссылку-стрелка между контроллерами представлений, а затем выберите атрибут-инспектор, есть идентификатор, укажите имя и выберите push-класс...