- [UIThreadSafeNode canPerformAction: withSender:]: selector no reconocido enviado a la instancia


9

Estoy enfrentando este bloqueo en mi aplicación iOS.

Fatal Exception: NSInvalidArgumentException
0  CoreFoundation                 0x1b9079c30 __exceptionPreprocess
1  libobjc.A.dylib                0x1b8d940c8 objc_exception_throw
2  CoreFoundation                 0x1b8f77fc0 -[NSOrderedSet initWithSet:copyItems:]
3  CoreFoundation                 0x1b907e3d4 ___forwarding___
4  CoreFoundation                 0x1b9080570 _CF_forwarding_prep_0
5  UIKitCore                      0x1bcf33444 -[UIKeyboardImpl deleteForwardAndNotify:]
6  UIKitCore                      0x1bcf39154 __57-[UIKeyboardImpl acceptPredictiveInput:executionContext:]_block_invoke
7  UIKitCore                      0x1bcf5b0c8 -[UIKeyboardTaskExecutionContext returnExecutionToParentWithInfo:]
8  UIKitCore                      0x1bcf366ec __100-[UIKeyboardImpl addWordTerminator:afterSpace:afterAcceptingCandidate:elapsedTime:executionContext:]_block_invoke
9  UIKitCore                      0x1bcf5b0c8 -[UIKeyboardTaskExecutionContext returnExecutionToParentWithInfo:]
10 UIKitCore                      0x1bcf2bdc0 __55-[UIKeyboardImpl handleKeyboardInput:executionContext:]_block_invoke_2
11 UIKitCore                      0x1bcf5cd70 -[UIKeyboardTaskEntry execute:]
12 UIKitCore                      0x1bcf5b6d4 -[UIKeyboardTaskQueue continueExecutionOnMainThread]
13 libobjc.A.dylib                0x1b8d8faf0 -[NSObject performSelector:withObject:]
14 Foundation                     0x1b946ec10 __NSThreadPerformPerform
15 CoreFoundation                 0x1b8ff5260 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__
16 CoreFoundation                 0x1b8ff51b4 __CFRunLoopDoSource0
17 CoreFoundation                 0x1b8ff4920 __CFRunLoopDoSources0
18 CoreFoundation                 0x1b8fef7ec __CFRunLoopRun
19 CoreFoundation                 0x1b8fef098 CFRunLoopRunSpecific
20 GraphicsServices               0x1c3159534 GSEventRunModal
21 UIKitCore                      0x1bd10f7ac UIApplicationMain
22 Haraj                          0x102fc6058 main + 15 (main.m:15)
23 libdyld.dylib                  0x1b8e6ef30 <redacted>

Hasta ahora se han reportado más de 100 accidentes. Esto solo ocurre en iOS 12 y iOS 13.

No puedo encontrar cómo sucede esto y cómo reproducirlo.

El seguimiento de la pila no muestra ninguno de los códigos de mi aplicación.

He subido el informe completo del bloqueo aquí .

Cualquier ayuda sería muy apreciada.

Respuestas:


10

Esto parece ser una regresión de un error antiguo relacionado con la "eliminación directa" en la entrada de texto de iOS: http://www.openradar.me/15114422

Creo que ha retrocedido debido al nuevo teclado "deslizar para escribir".

Tienes 2 opciones para arreglar:

  1. Actualice su UIWebView en desuso a WKWebView
  2. Solución Hacky: inserte el selector faltante UIThreadSafeNodeen tiempo de ejecución.

Aquí hay un ejemplo de código de cómo insertar el selector que falta:

BOOL canPerformAction(id withSender) {
    return false;
} 

- (void)viewDidLoad {
   [super viewDidLoad];

   Class class = NSClassFromString(@"UIThreadSafeNode");
   class_addMethod(class, @selector(canPerformAction:withSender:), (IMP)canPerformAction, "@@:");
}

Probablemente debería colocar el método de inserción en algún lugar que solo se cargue una vez, como en AppDelegate.

Aquí está el proyecto de ejemplo completo si lo necesita: https://github.com/elliotfiske/UIWebView-TextEntry-CrashFix/tree/master

Cómo reproducir:

Cree un formulario de entrada de texto en UIWebView, escriba algunas palabras y luego mueva el cursor al FINAL exacto de una palabra en el medio de la oración.

Luego, elija cualquiera de las sugerencias de texto predictivo. Vea el error en acción aquí:Grabación de pantalla de la reproducción del accidente


2
Estoy usando WKWebView. Me gusta tu solución de piratería. ¡Espero que funcione! :)
Abdullah Umer

No puedo reprobar el bloqueo en UIWebView en iOS13.2.2 desarrollador beta
harshith7823
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.