NSInteralInconsistencyException - UIKeyboardLayoutAlignmentView
Я получаю следующий крах в своих отчетах, но у меня нет подсказки относительно того, где начать искать! - любая помощь была оценена. У меня нет вызовов или ссылок на UIKeyboardLayoutAlignmentView
Fatal Exception: NSInternalInconsistencyException
The layout constraints still need update after sending -updateConstraints
to <_UIKeyboardLayoutAlignmentView: 0x14df2550; frame = (0 0; 0 0);
userInteractionEnabled = NO; layer = <CALayer: 0x1603de90>>.
_UIKeyboardLayoutAlignmentView or one of its superclasses may
have overridden -updateConstraints without calling super.
Or, something may have dirtied layout constraints in the middle
of updating them. Both are programming errors.
Thread : Crashed: com.apple.main-thread
0 libsystem_kernel.dylib 0x32d52df0 __pthread_kill + 8
1 libsystem_pthread.dylib 0x32dd1cc7 pthread_kill + 62
2 libsystem_c.dylib 0x32cee909 abort + 76
3 libc++abi.dylib 0x3201c9c9 __cxa_bad_cast
4 libc++abi.dylib 0x32036671 default_unexpected_handler()
5 libobjc.A.dylib 0x326fcf25 _objc_terminate() + 192
6 libc++abi.dylib 0x32033de3 std::__terminate(void (*)()) + 78
7 libc++abi.dylib 0x320338af __cxa_rethrow + 102
8 libobjc.A.dylib 0x326fcdd3 objc_exception_rethrow + 42
9 CoreFoundation 0x240bf29d CFRunLoopRunSpecific + 632
10 CoreFoundation 0x240bf013 CFRunLoopRunInMode + 106
11 GraphicsServices 0x2b99e201 GSEventRunModal + 136
12 UIKit 0x27863a59 UIApplicationMain + 1440
Thread : Fatal Exception: NSInternalInconsistencyException
0 CoreFoundation 0x241aefef __exceptionPreprocess + 126
1 libobjc.A.dylib 0x326fcc8b objc_exception_throw + 38
2 CoreFoundation 0x241aef35 -[NSException initWithCoder:]
3 UIKit 0x27e34dad -[UIView(AdditionalLayoutSupport) _internalUpdateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:] + 448
4 UIKit 0x27e34ec3 -[UIView(AdditionalLayoutSupport) _updateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:] + 126
5 CoreFoundation 0x240bec6d CFArrayApplyFunction + 36
6 UIKit 0x27e34c75 -[UIView(AdditionalLayoutSupport) _internalUpdateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:] + 136
7 UIKit 0x27e34ec3 -[UIView(AdditionalLayoutSupport) _updateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:] + 126
8 CoreFoundation 0x240bec6d CFArrayApplyFunction + 36
9 UIKit 0x27e34c75 -[UIView(AdditionalLayoutSupport) _internalUpdateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:] + 136
10 UIKit 0x27e34ec3 -[UIView(AdditionalLayoutSupport) _updateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:] + 126
11 UIKit 0x278f0a39 __60-[UIView(AdditionalLayoutSupport) updateConstraintsIfNeeded]_block_invoke + 84
12 Foundation 0x24e65755 -[NSISEngine withBehaviors:performModifications:] + 256
13 UIKit 0x278f0813 -[UIView(AdditionalLayoutSupport) updateConstraintsIfNeeded] + 206
14 UIKit 0x2790a663 -[UIWindow(UIConstraintBasedLayout) updateConstraintsIfNeeded] + 86
15 UIKit 0x27e35159 -[UIView(AdditionalLayoutSupport) _updateConstraintsAtEngineLevelIfNeeded] + 172
16 UIKit 0x27813d97 -[UIView(Hierarchy) layoutBelowIfNeeded] + 542
17 UIKit 0x27c77a2b -[_UIAlertControllerAnimatedTransitioning animateTransition:] + 690
18 UIKit 0x27adb08d __56-[UIPresentationController runTransitionForCurrentState]_block_invoke + 1820
19 UIKit 0x2787ea91 _applyBlockToCFArrayCopiedToStack + 308
20 UIKit 0x277f938f _afterCACommitHandler + 466
21 CoreFoundation 0x24174fed __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 20
22 CoreFoundation 0x241726ab __CFRunLoopDoObservers + 278
23 CoreFoundation 0x24172ab3 __CFRunLoopRun + 914
24 CoreFoundation 0x240bf201 CFRunLoopRunSpecific + 476
25 CoreFoundation 0x240bf013 CFRunLoopRunInMode + 106
26 GraphicsServices 0x2b99e201 GSEventRunModal + 136
27 UIKit 0x27863a59 UIApplicationMain + 1440
Ответы
Ответ 1
Хорошо, проблема обнаружила фиксированную.
На iOS8.3, если вы показываете клавиатуру, а затем вы пытаетесь отобразить UIAlertView или UIAlertController, у которого есть поле ввода, вы получите этот сбой.
Простым решением (для меня) было вставить
[self.window endEditing:YES];
или
[self.view endEditing:YES];
перед любыми предупреждениями, которые делают это, и больше не сбой
Обновление
В некоторых случаях мне также нужна следующая строка (как описано Ореном ниже), с endEditing И в этой строке у меня есть нулевые проблемы, но с одним ИЛИ другим я видел странный сбой, который странный, но комбо-атака, похоже, работает!
UITextField *txtEmail = [alertView textFieldAtIndex:0];
[txtEmail becomeFirstResponder];
Ответ 2
Это определенно ошибка с iOS8.3 при отображении UIAlertView или UIAlertController, когда клавиатура уже показана.
Обходной путь - назначить текстовое поле вида предупреждения как первого ответчика. Это работает лучше, чем скрытие клавиатуры с помощью resignFirstResponder
или endEditing
, потому что клавиатура не будет мерцать.
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle.......
alertView.alertViewStyle = UIAlertViewStylePlainTextInput;
UITextField *txtEmail = [alertView textFieldAtIndex:0];
[txtEmail becomeFirstResponder];
[alertView show];
Ответ 3
Это может помочь кому-то с той же проблемой. Я пришел сюда, чтобы проверить ваш ответ, но это не сработало для меня.
iOS 8.3 Сбой при попытке добавления текстового поля UIAlertController
Чтобы повторить то, что в другом потоке, я решил это, установив анимированный флаг в "НЕТ" при представлении UIAlertController
[self presentViewController:alert animated:NO completion:nil];
Ответ 4
У меня была такая же проблема с использованием плагина Cordova Dialogs в приложении Ionic. Кажется, что с iOS 8.3 всякий раз, когда вызывается уведомление или предупреждение, и клавиатура уже видна, он пытается открыть другую клавиатуру, которая вызывает сбой. Я добавил эту строку в файл CDVNotification.m в плагине.
if ([dialogType isEqualToString:DIALOG_TYPE_PROMPT]) {
alertView.alertViewStyle = UIAlertViewStylePlainTextInput;
UITextField* textField = [alertView textFieldAtIndex:0];
**[textField becomeFirstResponder];** //added this line to Fix :)
textField.text = defaultText;
}