I am facing this crash in my iOS app.
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
So far over a 100 crashes has been reported. This is happening only in iOS 12 and iOS 13.
I am not able to find how this is happening and how to reproduce it.
The stack trace does not show any of my app's code.
I have uploaded the full crash report here.
Any help would be highly appreciated.
这似乎是对与iOS文本输入中“转发删除”有关的古老错误的回归:http : //www.openradar.me/15114422
我相信由于新的“滑动输入”键盘,它已经退步了。
您有2种解决方案:
将不推荐使用的UIWebView升级到WKWebView
hacky解决方案:UIThreadSafeNode
在运行时插入缺少的选择器。
这是一个如何插入缺少的选择器的代码示例:
BOOL canPerformAction(id withSender) { return false; } - (void)viewDidLoad { [super viewDidLoad]; Class class = NSClassFromString(@"UIThreadSafeNode"); class_addMethod(class, @selector(canPerformAction:withSender:), (IMP)canPerformAction, "@@:"); }
您可能应该将方法插入放在仅加载一次的位置,例如AppDelegate中。
如果需要,这是完整的示例项目:https : //github.com/elliotfiske/UIWebView-TextEntry-CrashFix/tree/master
繁殖方法:
在UIWebView中创建文本输入表单,键入一些单词,然后将光标移动到句子中间单词的确切END。
然后,选择任何预想性文本建议。在这里查看实际的错误: