ios - todas - WKWebView se bloquea si el usuario responde un iMessage entrante
desbloquear contacto iphone (3)
No estoy seguro si te ayuda. También me he enfrentado al problema de la NAN y sucede si algún valor está dañado o no es válido. Entonces, si puede averiguar dónde se está corrompiendo su valor significa que está imprimiendo NAN y luego puede poner la declaración de seguridad.
Mis aplicaciones tienen un desplome significativo
CALayer position contains NaN: [377.833 nan]
con la siguiente pila -
Fatal Exception: CALayerInvalidGeometry
0 CoreFoundation 0x18283afe0 __exceptionPreprocess
1 libobjc.A.dylib 0x18129c538 objc_exception_throw
2 CoreFoundation 0x18283af28 -[NSException initWithCoder:]
3 QuartzCore 0x185b50acc CA::Layer::set_position(CA::Vec2<double> const&, bool)
4 QuartzCore 0x185b50c48 -[CALayer setPosition:]
5 QuartzCore 0x185b51198 -[CALayer setFrame:]
6 UIKit 0x1889657a8 -[UIView(Geometry) setFrame:]
7 UIKit 0x188979364 -[UIImageView _setViewGeometry:forMetric:]
8 UIKit 0x1889c6c38 -[UIScrollView _adjustScrollerIndicators:alwaysShowingThem:]
9 UIKit 0x188abfb34 -[UIScrollView(UIScrollViewInternal) _adjustForAutomaticKeyboardInfo:animated:lastAdjustment:]
10 WebKit 0x18c14af3c -[WKWebView _keyboardChangedWithInfo:adjustScrollView:]
11 CoreFoundation 0x1827d55f4 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__
12 CoreFoundation 0x1827d4d08 _CFXRegistrationPost
13 CoreFoundation 0x1827d4a84 ___CFXNotificationPost_block_invoke
14 CoreFoundation 0x1828437a8 -[_CFXNotificationRegistrar find:object:observer:enumerator:]
15 CoreFoundation 0x18271895c _CFXNotificationPost
16 Foundation 0x18322a930 -[NSNotificationCenter postNotificationName:object:userInfo:]
17 UIKit 0x1893500e4 -[UIInputWindowController postStartNotifications:withInfo:]
18 UIKit 0x189352350 __77-[UIInputWindowController moveFromPlacement:toPlacement:starting:completion:]_block_invoke.907
19 UIKit 0x188a383cc -[UIInputViewAnimationStyle launchAnimation:afterStarted:completion:forHost:fromCurrentPosition:]
20 UIKit 0x189351dc8 -[UIInputWindowController moveFromPlacement:toPlacement:starting:completion:]
21 UIKit 0x1893588b0 -[UIInputWindowController setInputViewSet:]
22 UIKit 0x189351494 -[UIInputWindowController performOperations:withAnimationStyle:]
23 UIKit 0x188a30d94 -[UIPeripheralHost(UIKitInternal) setInputViews:animationStyle:]
24 UIKit 0x1890f7160 -[_UIRemoteKeyboards keyboardChanged:shouldConsiderSnapshottingKeyboard:isLocalEvent:]
25 UIKit 0x1890f6e8c __37-[_UIRemoteKeyboards
Mirando los registros de los usuarios encontré algunas cosas comunes -
- Todos los usuarios están en un controlador de vista que contiene un WKWebView
- Todos los registros indican que la aplicación obtuvo "applicationWillResignActive" antes del bloqueo
- La pila muestra que se abrió un teclado, pero no tenemos otro lugar para abrir el teclado en ese controlador de vista.
- todos los usuarios son iOS 10.3 +
El único escenario que se ajustó fue que un usuario obtuvo un iMessage mientras la aplicación estaba con un WKWebView visible y la fuerza lo tocó en una respuesta rápida. Probamos este escenario y BOOOM la aplicación se estrelló.
Así que encontramos el accidente, pero no tenemos ni idea de lo que está pasando. Cualquiera que se haya enfrentado a ese problema o tenga una idea, ¿cuál podría ser?
Gracias
establezca la variable de entorno CG_NUMERICS_SHOW_BACKTRACE en el esquema de ejecución de Xcode y volcará el seguimiento de pila que provocó que se produjera el valor no numérico.
(1) Primero verifique que su diseño sea correcto, use "Autolayout" y asegúrese de que sus restricciones sean correctas y de que esté configurando las subvistas correctas.
Intente depurar visualmente el diseño para ver si hay cosas extrañas que estén sucediendo.
Depuración-> Ver depuración-> Capturar jerarquía de vistas.
(2) Desde la traza de la pila, me doy cuenta de que el teclado se presenta, y debido a esto, las vistas deben ajustarse para hacer lugar para el teclado. Es evidente que esto sucede tan pronto como llega un mensaje en el seguimiento de la pila.
También intentaría renunciar a FirstResponder, tal vez en tu AppDelegate
- (void)applicationWillResignActive:(UIApplication *)application {
[_wkWebView resignFirstResponder];
}
(3) También encontré que hay un error, donde el WKWEbView no se resignará en el primer respondedor ... esto podría estar relacionado:
Error 167898 - [iOS] - [WKWebView BecomeFirstResponder] y - [WKWebView resignFirstResponder] no se llaman cuando ocurren cambios no programáticos del primer respondedor
Tal vez una solución alternativa sería presentar otra vista tan pronto como su solicitud renuncie.
- (void)applicationWillResignActive:(UIApplication *)application {
// if _wkWebView is showing then hide and show other view
}