У меня возникает эта проблема, когда я моделирую свое приложение, это не ошибка или предупреждение, но оно появляется в моей консоли, кто-нибудь когда-либо сталкивался с этим раньше?
iphone
ios
transition
К.Джонс
источник
источник
Ответы:
В моем случае эта ошибка возникает, когда вы очень быстро нажимаете две вкладки в табличном представлении.
Результат вызывает неправильное название, кнопка возврата исчезает. Кто - то сказал , что , когда вы нажимаете вид,
set animated:NO
. Ошибка исчезнет, но по-прежнему вызывает странное поведение. Он подталкивает два представления, затем вам нужно дважды вернуться, чтобы вернуться к экрану просмотра таблицы.Метод, который я пробовал решить эту проблему:
Добавить
BOOL cellSelected;
в
viewWillAppear
cellSelected = YES;
в didselectcell делегат
if (cellSelected){cellSelected = NO; do action ; }
Это помогает предотвратить быстрое нажатие на две разные ячейки.
источник
В моем случае это произошло, когда я сработал
[self performSegueWithIdentifier:@"SomeIdentifier" sender:self];
в методеUINavigationController
элементаviewDidLoad
.Перенос его в
viewDidAppear
метод решил проблему.Причина, скорее всего, в том, что
viewDidLoad
не все причудливые анимации уже закончены, тогда как воviewDidAppear
всех уже сделано.источник
У меня тоже есть эта проблема. Я нашел два решения этой проблемы:
UINavigationController
котором эта проблема решена. Буферизованный контроллер навигацииисточник
Вы должны запускать свой код в другом цикле, чтобы избежать этого
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]; });
источник
dispatch_async
главную очередь. Дело в том,dispatch_async
что он ждет, пока все остальные анимации в основной очереди не будут выполнены. это намного лучше, чем использование задержки, потому что: 1 - вы никогда не узнаете, достаточно ли задержки, это зависит от вашего хост-устройства; 2 - вы в конечном итоге переусердствуете с задержкой, и что-то будет отставать. попробуйте это:dispatch_async(dispatch_get_main_queue(), ^{[self presentViewController:self.yourModalVC animated:YES completion:nil];});
У меня было много проблем с той же проблемой. Я решил это таким образом
1) Вы не используете
UIViewController's
назначенный инициализаторinitWithNibName:bundle:
. Попробуйте использовать его вместо простоinit
.2) установите
animated:YES
NO, и это решило проблему. например.[self.navigationController pushViewController: viewController_Obj animated:NO];
источник
У меня была такая же проблема с использованием контроллера навигации и подталкивания к нему других контроллеров. Я пытался использовать буферный контроллер навигации и несколько других подходов, но у меня это не сработало. Потратив некоторое время на то, чтобы разобраться в этом, я заметил, что эта проблема возникает, если вы пытаетесь нажать новый контроллер представления во время выполнения предыдущей транзакции (анимации) (я думаю, около 0,5 секунды). В любом случае, я быстро решил, что делегировал навигационный контроллер и дождался завершения предыдущей анимации.
источник
Убедитесь, что вы не забыли в -viewWillAppear, -viewDidAppear, -viewDidLoad, -viewWillDisappear, -viewDidDisappear вызвать правильный супер-метод в вашей перегрузке этих методов. Например, в моем случае я не совпал с именем метода следующим образом:
-(void)viewDidAppear { [super viewDidDisappear]; //some code staff .. }
Обратите внимание , что появляются и исчезают методы являются несовпадающими
источник
super.viewWillAppear()
внутриviewDidDisappear()
.«Несбалансированные вызовы для начала / завершения смены появления для»
Говорит, что анимация запускается до того, как последняя связанная анимация не завершена. Итак, вы открываете какой-либо контроллер представления, прежде чем нажимать новый? Или может выскакивает рут? если да, попробуйте сделать это без анимации, т.е.
[self.navigationController popToRootViewControllerAnimated:NO];
И посмотрите, решит ли это проблему. В моем случае это помогло.
источник
У меня возникла эта проблема, потому что я вызывал UIPrintInteractionController из viewController без UITabbar и без UINavigationBar. Похоже, что UIPrintInteractionController не получил правильный printInteractionControllerParentViewController. Реализация метода в делегате и возврат текущего rootViewController сработали для меня.
- (UIViewController*)printInteractionControllerParentViewController:(UIPrintInteractionController*)printInteractionController;
источник
У меня была аналогичная проблема, связанная с перемоткой модальных диалогов. Выложил решение здесь ...
https://stackoverflow.com/a/38795258/324479
[Проблема]
Контроллер навигации -> VC1 -Push -> VC2 -PopOver или Modal Segue -> VC3.
VC3 возвращается к VC1.
Когда переход от VC2 к VC3 является PopOver и Modal, раскрутка заканчивается предупреждением: несбалансированные вызовы для начала / завершения переходов внешнего вида для UIViewController "
Если переход от VC к VC нажат, предупреждение исчезнет.
[Решение]
Было бы здорово, если бы логика размотки позаботилась об этом. Может это ошибка, а может и нет. В любом случае решение состоит в том, чтобы сделать VC2 (контроллер, у которого есть всплывающее окно) целью перемотки, а затем дождаться его появления, прежде чем выскакивать контроллер навигации. Это гарантирует, что анимация перемотки назад (всплывающее окно в обратном направлении) успеет закончиться, прежде чем двигаться дальше назад. Даже при отключенной анимации он должен подождать, иначе вы получите ошибку.
Ваш код для VC2 должен быть следующим. (Свифт)
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) } } }
источник
Ситуация может возникнуть, если вы добавляете представление с контроллером модального представления в качестве подчиненного представления. Лучше всего использовать:
-(void) viewDidAppear:(BOOL)animated { [self presentViewController:self.yourModalVC animated:YES completion:nil]; }
По сути, это означает, что жизненный цикл представления не оптимизирован для тех viewControllers, которые вы пытаетесь отобразить.
источник
У меня аналогичная проблема при попытке сделать:
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:2] animated:YES];
в такой функции, как
- (void) popUpToLevelTwo;
, и поставить areturn;
в конце функции решает проблемуисточник
Я тоже получил это в
[self dismissModalViewControllerAnimated:YES];
Я изменил на
YES
aNO
, и это решило проблему.источник
У меня такая же проблема, когда я использовал метод pop контроллера навигации. В моем приложении я использую отдельную логику для контроллера навигации, поэтому я избегал использования панели навигации, и она всегда скрыта. Затем я использую настраиваемый вид и уведомление для обработки кнопки возврата и ее событий. наблюдатели уведомлений регистрируются и не удаляются. Таким образом, уведомление срабатывает дважды и создает вышеупомянутую ошибку. Тщательно проверьте свой код на наличие таких ошибок
источник
Как бы то ни было, я получил ту же ошибку, когда не включил вызов
[super viewDidLoad:animated]
в моеviewDidLoad
переопределение.источник
У меня тоже была эта проблема, когда я нажимал кнопку на NIB. Оказывается, я случайно подключил кнопку для отправки события двум методам IBAction, каждый из которых выполнял pushViewController: animated:
источник
У меня была реализована некоторая логика, чтобы дождаться нажатия,
UIViewController
пока не будут загружены все данные. В этой логике была ошибка, из-за которойUIViewController
слишком рано был запущен, пока выполнялся еще один вызов API.Это вызвало
UIViewController
двойное нажатие того же самогоUINavigationController
и выдало это предупреждение.источник
Причина для сообщения: Это сообщение отображается , если получить и только тогда , когда вы толкание / представляя другой контроллер Вида с
viewWillAppear
,loadView
,init
илиviewDidLoad
методом текущего View ControllerСпособ удаления сообщения об ошибке: переместите код отправки / представления в
viewDidAppear
метод, который решит проблемуисточник
Swift 4
Моя проблема заключалась в том, что я представлял еще одну VC до того, как закончился рендеринг моей текущей.
Решение состояло в том, чтобы представить мой следующий ВК после небольшой задержки.
ЧТО НЕ СЛЕДУЕТ ДЕЛАТЬ
override func viewDidLoad() { super.viewDidLoad() self.present(MyNextVC(), animated: true, completion: nil) }
ЧТО ТЫ ДОЛЖЕН ДЕЛАТЬ
override func viewDidLoad() { super.viewDidLoad() //Wait until the view finished to be constructed perform(#selector(showMyNextVC), with: nil, afterDelay: 0.01) } @objc func showCityList() { self.present(MyNextVC(), animated: true, completion: nil) }
источник
У меня была эта проблема, когда я забыл установить Break; после нажатия представления в операторе switch!
Как здесь:
case 1:{ SomeViewController *someViewController = [[SomeViewController alloc]initWithNibName:@"SomeViewController" bundle:Nil]; [self.navigationController pushViewController:someViewController animated:YES]; [someViewController release]; } break; //Forgetting to set break here:
источник
причина ошибки «Несбалансированные вызовы для начала / окончания переходов внешнего вида» - когда вы переходите | переходить дважды одновременно
источник
одно решение было бы,
[NSTimer scheduledTimerWithTimeInterval:0.05(or as required) target:self selector:@selector(your_selector_method_to_push_the_view) userInfo:nil repeats:NO];
источник
Вы можете столкнуться с этим, если попытаетесь закрыть UIViewController до того, как он загрузится.
У меня было это сообщение в консоли, и я полностью сосредоточился на UIViewController, который безуспешно представлял новый UIViewController. Наконец я обнаружил, что проблема заключалась в том, что UIViewController, который я представлял, самоустраивался, потому что пользователь не вошел в свою учетную запись.
Надеюсь, это кому-то поможет.
источник
Для меня это было непросто: я переопределил
override func shouldAutomaticallyForwardRotationMethods() -> Bool { return true }
без отмены:
override func shouldAutomaticallyForwardAppearanceMethods() -> Bool { return true }
в моем оконном контроллере корневой навигации. затем дочерний контроллер навигации пожаловался на нажатие другого контроллера представления с вышеупомянутым предупреждением. Предупреждение было не самым ужасным, большая проблема заключалась в том, что делегат дочернего контроллера навигации больше не вызывался. Weired.
источник
В моем случае я извлечение
NSData
изNSURL
внутренного «viewDidLoad
» метода.источник