NSInternalInconsistencyException?发送后布局约束仍需要更新

NSInternalInconsistencyException? The layout constraints still need update after sending

我遇到了一个问题,我有一个忘记密码选项,我在其中放置了一个带输入字段的 UIAlertView。

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Forgot Password?"
                                                        message:@"Please enter your username to retrieve password"
                                                       delegate:self
                                              cancelButtonTitle:@"Cancel"
                                              otherButtonTitles:@"Ok", nil];
    [alertView setAlertViewStyle:UIAlertViewStylePlainTextInput];
    [alertView show];

当应用程序启动时,它工作正常,但是当我登录、执行各种操作、注销并按 "Forgot password" 时,出现此错误并且我的应用程序崩溃了:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'The layout constraints still need update after sending -updateConstraints to <_UIKeyboardLayoutAlignmentView: 0x7ffef5b37b00; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = >. _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.'

完整日志如下:

*** First throw call stack:
(
    0   CoreFoundation                      0x000000010e850c65 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x000000010e4e9bb7 objc_exception_throw + 45
    2   CoreFoundation                      0x000000010e850b9d +[NSException raise:format:] + 205
    3   UIKit                               0x000000010f2c5427 -[UIView(AdditionalLayoutSupport) _internalUpdateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:] + 467
    4   UIKit                               0x000000010f2c553e -[UIView(AdditionalLayoutSupport) _updateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:] + 124
    5   CoreFoundation                      0x000000010e757354 CFArrayApplyFunction + 68
    6   UIKit                               0x000000010f2c52ed -[UIView(AdditionalLayoutSupport) _internalUpdateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:] + 153
    7   UIKit                               0x000000010f2c553e -[UIView(AdditionalLayoutSupport) _updateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:] + 124
    8   CoreFoundation                      0x000000010e757354 CFArrayApplyFunction + 68
    9   UIKit                               0x000000010f2c52ed -[UIView(AdditionalLayoutSupport) _internalUpdateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:] + 153
    10  UIKit                               0x000000010f2c553e -[UIView(AdditionalLayoutSupport) _updateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:] + 124
    11  UIKit                               0x000000010f2c5a0e __60-[UIView(AdditionalLayoutSupport) updateConstraintsIfNeeded]_block_invoke + 96
    12  Foundation                          0x000000010e0891be -[NSISEngine withBehaviors:performModifications:] + 155
    13  UIKit                               0x000000010f2c56d6 -[UIView(AdditionalLayoutSupport) updateConstraintsIfNeeded] + 231
    14  UIKit                               0x000000010f2b8ebe -[UIWindow(UIConstraintBasedLayout) updateConstraintsIfNeeded] + 91
    15  UIKit                               0x000000010f2c5dde -[UIView(AdditionalLayoutSupport) _updateConstraintsAtEngineLevelIfNeeded] + 146
    16  UIKit                               0x000000010ecbd56a -[UIView(Hierarchy) layoutBelowIfNeeded] + 340
    17  UIKit                               0x000000010f05245e -[_UIAlertControllerAnimatedTransitioning animateTransition:] + 672
    18  UIKit                               0x000000010ed57a4e __56-[UIPresentationController runTransitionForCurrentState]_block_invoke + 1867
    19  UIKit                               0x000000010ec6d62c _applyBlockToCFArrayCopiedToStack + 314
    20  UIKit                               0x000000010ec6d4a6 _afterCACommitHandler + 533
    21  CoreFoundation                      0x000000010e783ca7 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
    22  CoreFoundation                      0x000000010e783c00 __CFRunLoopDoObservers + 368
    23  CoreFoundation                      0x000000010e779a33 __CFRunLoopRun + 1123
    24  CoreFoundation                      0x000000010e779366 CFRunLoopRunSpecific + 470
    25  GraphicsServices                    0x00000001126c9a3e GSEventRunModal + 161
    26  UIKit                               0x000000010ec49900 UIApplicationMain + 1282
    27  Univet                              0x000000010d83150f main + 111
    28  libdyld.dylib                       0x000000011017a145 start + 1
    29  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

我正在使用 IQKeyboardManager 在文本字段之间导航。

请多指教,不胜感激。

提前致谢。

经过简单的 Google 搜索,我发现 您的问题。

On iOS 8.3 if you the keyboard is being displayed and then you try to display a UIAlertView or UIAlertController that has an input field you will get this crash.