ios - NSInteralInconsistencyException-UIKeyboardLayoutAlignmentView
(4)
Esto es definitivamente un error con iOS8.3 cuando se muestra un UIAlertView o UIAlertController cuando ya se muestra el teclado.
Una solución es asignar el campo de texto de la vista de alerta como el primer respondedor. Esto funciona mejor que ocultar el teclado mediante resignFirstResponder
o endEditing
porque el teclado no parpadea.
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle.......
alertView.alertViewStyle = UIAlertViewStylePlainTextInput;
UITextField *txtEmail = [alertView textFieldAtIndex:0];
[txtEmail becomeFirstResponder];
[alertView show];
Estoy obteniendo el bloqueo de seguimiento en mis informes, ¡pero no tengo idea de dónde empezar a buscar! - Cualquier ayuda apreciada. No tengo llamadas ni referencia a 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
Esto podría ayudar a alguien con el mismo problema. Vine aquí para comprobar su respuesta, pero no funcionó para mí.
iOS 8.3 UIAlertController se bloquea al intentar agregar un campo de texto
Para reiterar lo que hay en el otro hilo, lo resolví configurando la bandera animada en "NO" al presentar el UIAlertController
[self presentViewController:alert animated:NO completion:nil];
Ok, el problema encontró una solución. En iOS8.3, si se muestra el teclado y luego intenta mostrar un UIAlertView o UIAlertController que tiene un campo de entrada, obtendrá este bloqueo.
Una solución simple (para mí) fue insertar
[self.window endEditing:YES];
o
[self.view endEditing:YES];
frente a las alertas que hacen esto y ya no se bloquea
Actualizar
En algunos casos, también he necesitado la siguiente línea (como se describe en Oren a continuación), con endEditing Y esta línea tengo cero problemas, pero con uno O el otro he visto el extraño fallo que es extraño, pero el ataque combinado parece trabajar !
UITextField *txtEmail = [alertView textFieldAtIndex:0];
[txtEmail becomeFirstResponder];
Tuve el mismo problema al usar el complemento Cordova Dialogs en una aplicación Ionic. Parece a partir de iOS 8.3 cada vez que se llama a una notificación o alerta y el teclado ya está visible, intenta abrir otro teclado que provoca el bloqueo. Agregué esta una línea al archivo CDVNotification.m en el complemento.
if ([dialogType isEqualToString:DIALOG_TYPE_PROMPT]) {
alertView.alertViewStyle = UIAlertViewStylePlainTextInput;
UITextField* textField = [alertView textFieldAtIndex:0];
**[textField becomeFirstResponder];** //added this line to Fix :)
textField.text = defaultText;
}