Несбалансированные вызовы для начала / конца появления переходов для - PullRequest
91 голосов
/ 25 июля 2011

У меня есть эта проблема, когда я симулирую свое приложение, это не ошибка или предупреждение, но оно появляется в моей консоли, кто-нибудь когда-либо испытывал это раньше?

Ответы [ 25 ]

48 голосов
/ 23 октября 2011

В моем случае эта ошибка возникает, когда вы очень быстро нажимаете на две вкладки в виде таблицы.

Результат вызывает неправильное имя заголовка, кнопка возврата исчезает.Кто-то упомянул, что когда вы нажимаете на представление, set animated:NO.Ошибка исчезнет, ​​но все еще вызывает странное поведение.Он выдвигает два представления, затем вам нужно дважды вернуться, чтобы вернуться к экрану просмотра таблицы.

Метод, который я пытался решить для этой проблемы:

add BOOL cellSelected;

в viewWillAppear cellSelected = YES;

в делегате didselectcell if (cellSelected){cellSelected = NO; do action ; }

Это помогает предотвратить быстрое нажатие двух разных ячеек.

42 голосов
/ 14 ноября 2012

В моем случае это произошло, когда я вызвал [self performSegueWithIdentifier:@"SomeIdentifier" sender:self]; в методе viewDidLoad элемента UINavigationController.

Перемещение в метод viewDidAppear решило проблему.

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

21 голосов
/ 16 января 2012

У меня тоже есть эта проблема.Я нашел два решения этой проблемы:

  1. Вы можете увидеть это решение выше.
  2. Я нашел подкласс UINavigationController, где эта проблема решена. Буферизованный навигационный контроллер
15 голосов
/ 28 августа 2013

Вы должны запустить свой код в другом цикле, чтобы избежать этого

 double delayInSeconds = 0.1;
        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
        dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
            // Put your code here
[self presentViewController:self.yourModalVC animated:YES completion:nil];
        });
12 голосов
/ 20 октября 2012

У меня было много проблем с той же проблемой. Я решил это таким образом

1) Вы не используете UIViewController's указанный инициализатор initWithNibName:bundle:. Попробуйте использовать его вместо init.

2) установите animated:YES в NO, и это решило проблему. например. [self.navigationController pushViewController: viewController_Obj animated:NO];

7 голосов
/ 30 июня 2014

Убедитесь, что вы не забыли в -viewWillAppear, -viewDidAppear, -viewDidLoad, -viewWillDisappear, -viewDidDisappear вызвать правильный метод super в вашей перегрузке этих методов.Например, в моем случае я не соответствовал имени метода, как это:

-(void)viewDidAppear
{
 [super viewDidDisappear];
 //some code staff
 ..
}

обратите внимание, что появляются и исчезают методы не соответствуют

7 голосов
/ 01 ноября 2012

У меня была та же проблема с использованием контроллера навигации и подталкивания к нему других контроллеров.Я пытался использовать Buffered Navigation Controller и несколько других подходов, но у меня это не сработало.Потратив некоторое время на выяснение этого, я заметил, что эта проблема возникает, если вы пытаетесь выдвинуть новый контроллер представления во время выполнения предыдущей транзакции (анимации) (я предполагаю, что она будет длиться примерно 0,5 секунды).В любом случае, я сделал быстрое решение с делегированием контроллера навигации и ожиданием завершения анимации.

3 голосов
/ 03 июля 2013

'Несбалансированные вызовы, чтобы начать / закончить переходы появления для'

Говорит, что анимация запускается до того, как последняя связанная анимация не была сделана. Итак, вы нажимаете какой-либо контроллер представления, прежде чем нажать новый? Или может выскочить в корень? если да, попробуйте сделать это без анимации, т.е. [self.navigationController popToRootViewControllerAnimated:NO];

И посмотрите, решит ли это проблему. В моем случае это помогло.

2 голосов
/ 13 августа 2015

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

Способ удаления Сообщение об ошибке: Переместите код для отправки / представления в viewDidAppear Метод решит проблему

2 голосов
/ 05 августа 2016

У меня была похожая проблема, связанная с перемоткой модальных диалогов. Разместил решение здесь ...

https://stackoverflow.com/a/38795258/324479

[Проблема]

Nav Controller -> VC1 -Push -> VC2 -PopOver или Modal Segue -> VC3.

VC3 возвращается к VC1.

Когда Segue от VC2 до VC3 имеет PopOver и Modal, размотка заканчивается предупреждением: несбалансированные вызовы для начала / окончания переходов внешнего вида для UIViewController "

Если переход от VC к VC нажат, предупреждение исчезнет.

[Решение]

Было бы здорово, если бы логика раскрутки позаботилась об этом. Может быть, это ошибка, а может и нет. В любом случае, решение состоит в том, чтобы сделать VC2 (контроллер, у которого есть всплывающее окно) целью перемотки, затем подождать, пока он не появится, прежде чем вызвать навигационный контроллер. Это гарантирует, что анимация перемотки (обратного всплывающего окна) имеет достаточно времени для завершения, прежде чем двигаться дальше назад. Даже если анимация отключена, она все равно должна подождать, иначе вы получите ошибку.

Ваш код для VC2 должен быть следующим. (Swift)

class VC2: UIViewController {
    private var unwind = false
    @IBAction func unwindToVC1(segue:UIStoryboardSegue) {
        unwind = true
    }

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

        if unwind {
            self.navigationController?.popViewControllerAnimated(false)
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...