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 

好的,问题发现一个固定的。 在iOS8.3上,如果您正在显示键盘,然后尝试显示具有input字段的UIAlertView或UIAlertController,则会发生此故障。

简单的解决scheme(对我来说)是插入

 [self.window endEditing:YES]; 

要么

 [self.view endEditing:YES]; 

在任何这样做的警报面前,它不再崩溃

更新

在某些情况下,我还需要下面一行(如下面Oren所述),endEditing和这一行我没有问题 – 但是有一个或另一个我已经看到奇怪的崩溃,这是奇怪的 – 但组合攻击似乎上class !

 UITextField *txtEmail = [alertView textFieldAtIndex:0]; [txtEmail becomeFirstResponder]; 

这显然是在显示键盘时显示UIAlertView或UIAlertController时iOS8.3的一个错误。

解决方法是将警报视图的文本字段分配为第一个响应者。 这比通过resignFirstResponderendEditing隐藏键盘更好,因为键盘不会闪烁。

 UIAlertView *alertView = [[UIAlertView alloc] initWithTitle....... alertView.alertViewStyle = UIAlertViewStylePlainTextInput; UITextField *txtEmail = [alertView textFieldAtIndex:0]; [txtEmail becomeFirstResponder]; [alertView show]; 

这可能会帮助有同样问题的人。 我来这里查看你的答案,但是这对我没有用。

iOS 8.3 UIAlertController在尝试添加文本字段时崩溃

为了重申另一个线程上的内容,我通过在呈现UIAlertController时将animation标志设置为“NO”来解决这个问题

 [self presentViewController:alert animated:NO completion:nil]; 

在Ionic应用程序中使用Cordova对话框插件时遇到了同样的问题。 看起来像iOS8.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; }