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

Продолжайте получать "Неуравновешенные вызовы для начала/конца перехода на внешний вид для ошибки <ViewController>"

У меня есть приложение, которое почти работает отлично. Вот как структурировано мое приложение:

6 общих контроллеров просмотра на раскадровке. Наиболее важными являются первые 3 контроллера просмотра. Начальный контроллер просмотра имеет кнопки "Вход" и "Регистрация". Кнопка "Войти" представляет собой контроллер входа в систему, а кнопка "Регистрация" представляет собой зарегистрированный контроллер регистрации.

Контроллер просмотра регистрации имеет 3 поля для имени пользователя, пароля и электронной почты, а затем кнопку "отправить". Кнопка отправки отправляет данные на мой веб-сервер, и если все отправляется успешно, он сам вызывает метод "performSegueWithIdentifier".

Вот утверждение:

[self performSegueWithIdentifier:@"superSegue" sender:self];

Я потратил 2 часа сегодня, пытаясь заставить вышеупомянутый вызов метода работать, и он, наконец, работает. Чтобы заставить его работать, мне нужно было выбрать свой контроллер просмотра отчетов на раскадровке и перейти к редактору > Вставить в > контроллер навигации (если я правильно помню, я должен был это сделать, потому что контроллер представления регистрации представлен в виде модально). Затем я перетащил с моей кнопки отправки контроллера регистрации в контроллер просмотра, на который я хочу нажать и выбрать Push, а затем введите имя идентификатора.

В любом случае все вышеописанное работает отлично, пока я не попытаюсь использовать кнопку "Назад" на контроллере представления, которую мы нажали на вызов метода. Если я нажму кнопку "Назад", он перейдет на 90% черный экран с пустой навигационной панелью вверху с помощью кнопки "назад", и, конечно, эта кнопка "назад" ничего не делает.

Это ошибка, которую я получаю в консоли:

Unbalanced calls to begin/end appearance transitions for <VerificationViewController: 0x14ed1bb0>

Контрольный контроллер просмотра - это контроллер просмотра, с помощью которого контроллер просмотра отчетов подталкивает с помощью метода performSegueWithIdentifier.

Кто-нибудь знает, как я могу исправить эту ошибку?

Я включил скриншот ниже того, как выглядит раскадровка в xcode. Существует контроллер просмотра, который я кодировал, но еще не подключен, и не должен иметь никакого значения, так что вы можете игнорировать контроллер просмотра справа от входа в систему VC.

enter image description here

4b9b3361

Ответ 1

Я нашел ответ сегодня утром в другом вопросе stackoverflow. Ответ можно найти здесь.

Когда я изначально настроил Push Segue, я нажал и перетащил его с помощью кнопки, а также вызвал метод executeSegueWIthIdentifier внутри этой реализации метода IBAction. Это привело к тому, что на кнопочном прессе выполнялись 2 идентичных нажатия. Я просто оставил вызов метода в IBAction, удалил старый push segue и создал новый push segue только на этот раз, когда я нажал, и перетащил его из всего контроллера View вместо его кнопки.

Ответ 2

Я решил эту проблему, обернув это.

dispatch_async(dispatch_get_main_queue()) {
    //call your performSegueWithIdentifier in here
}

Ответ 3

В моем случае это был подкласс UITabBarController с перегруженным методом setSelectedIndex:, который выполняет переход с анимацией. Я обнаружил, что перед запуском анимации необходимо вызвать следующее:

[sourceVC viewWillDisappear:YES];
[destinationVC viewWillAppear:YES];

И в блоке завершения:

if (finished) {
    [sourceVC viewDidDisappear:YES];
    [destinationVC viewDidAppear:YES];
    [super setSelectedIndex:selectedIndex];
}

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

Ответ 4

В моем случае это предупреждение было вызвано вызовом popToRootViewController UINavigationController, пока отображается модальное представление. Когда я переместил popToRootViewController после отклонения модального вида, появится предупреждение о прекращении.

Ответ 5

Причина ошибки. Это сообщение отображается, если вы нажимаете/представляете другой контроллер View из метода viewWillAppear, loadView, init или viewDidLoad текущего контроллера просмотра

Решение: переместите ваш толкающий/представляющий код в метод viewDidAppear, решив проблему

Причина в том, что в viewDidLoad уже не завершены все фантастические анимации, тогда как в viewDidAppear все сделано.

Ответ 6

Я работал, и это хорошо для меня Причина ошибки: это сообщение отображается, если вы нажимаете/представляете другой контроллер View из TabBarController, Решение: установите viewController.modalPresentationStyle = .overCurrentContext, затем введите viewController topViewController.present(vc, animated: true, completion: nil)