- [UIThreadSafeNode canPerformAction: withSender:]: Nicht erkannter Selektor an Instanz gesendet

9

Ich bin mit diesem Absturz in meiner iOS-App konfrontiert.

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>

Bisher wurden über 100 Abstürze gemeldet. Dies geschieht nur in iOS 12 und iOS 13.

Ich kann nicht herausfinden, wie dies geschieht und wie ich es reproduzieren kann.

Der Stack-Trace zeigt keinen Code meiner App an.

Ich habe den vollständigen Absturzbericht hier hochgeladen .

Jede Hilfe wäre sehr dankbar.

Abdullah Umer
quelle

Antworten:

10

Dies scheint eine Regression eines alten Fehlers zu sein, der mit "Forward Delete" bei der Texteingabe von iOS zusammenhängt: http://www.openradar.me/15114422

Ich glaube, es ist aufgrund der neuen Tastatur "Swipe to Type" zurückgegangen.

Sie haben 2 Optionen zu beheben:

  1. Aktualisieren Sie Ihre veraltete UIWebView auf eine WKWebView
  2. Hacky-Lösung: Fügen Sie den fehlenden Selektor zur UIThreadSafeNodeLaufzeit ein.

Hier ist ein Codebeispiel zum Einfügen des fehlenden Selektors:

BOOL canPerformAction(id withSender) {
    return false;
} 

- (void)viewDidLoad {
   [super viewDidLoad];

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

Sie sollten die Methodeneinfügung wahrscheinlich an einer Stelle ablegen, die nur einmal geladen wird, wie im AppDelegate.

Hier ist das vollständige Beispielprojekt, falls Sie es benötigen: https://github.com/elliotfiske/UIWebView-TextEntry-CrashFix/tree/master

So reproduzieren Sie:

Erstellen Sie ein Texteingabeformular in einer UIWebView, geben Sie einige Wörter ein und bewegen Sie den Cursor auf das genaue ENDE eines Wortes in der Mitte des Satzes.

Wählen Sie dann einen der prädiktiven Textvorschläge aus. Sehen Sie den Fehler in Aktion hier:Bildschirmaufnahme der Crash-Reproduktion

Elliot Fiske
quelle
2
Ich benutze WKWebView. Ich mag deine Hacking-Lösung. Ich hoffe es klappt! :)
Abdullah Umer
Ich bin nicht in der Lage, den Absturz auf UIWebView auf iOS13.2.2 Entwickler Beta
harschith7823