- [UIThreadSafeNode canPerformAction: withSender:]: bộ chọn không nhận dạng được gửi đến ví dụ


9

Tôi đang đối mặt với sự cố này trong ứng dụng iOS của tôi.

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>

Cho đến nay, hơn 100 vụ tai nạn đã được báo cáo. Điều này chỉ xảy ra trong iOS 12 và iOS 13.

Tôi không thể tìm thấy làm thế nào điều này đang xảy ra và làm thế nào để tái tạo nó.

Theo dõi ngăn xếp không hiển thị bất kỳ mã ứng dụng nào của tôi.

Tôi đã tải lên báo cáo sự cố đầy đủ ở đây .

Bất cứ sự giúp đỡ nào cũng được đánh giá cao.

Câu trả lời:


10

Đây dường như là một hồi quy của một lỗi cổ xưa liên quan đến "xóa chuyển tiếp" trên mục nhập văn bản iOS: http://www.openradar.me/15114422

Tôi tin rằng nó đã thoái lui vì bàn phím "vuốt để gõ" mới.

Bạn có 2 tùy chọn để khắc phục:

  1. Nâng cấp UIWebView không dùng nữa của bạn lên WKWebView
  2. Giải pháp Hacky: chèn bộ chọn bị thiếu UIThreadSafeNodekhi chạy.

Đây là một ví dụ mã về cách chèn bộ chọn bị thiếu:

BOOL canPerformAction(id withSender) {
    return false;
} 

- (void)viewDidLoad {
   [super viewDidLoad];

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

Có lẽ bạn nên đặt phương thức chèn vào một nơi nào đó chỉ tải một lần, như trong AppDelegate.

Đây là dự án ví dụ đầy đủ nếu bạn cần: https://github.com/elliotfiske/UIWebView-TextEntry-CrashFix/tree/master

Cách sinh sản:

Tạo một biểu mẫu nhập văn bản trong UIWebView, nhập một số từ, sau đó di chuyển con trỏ đến END chính xác của một từ ở giữa câu.

Sau đó, chọn bất kỳ đề xuất văn bản dự đoán. Xem lỗi trong hành động ở đây:Ghi lại màn hình tái tạo sự cố


2
Tôi đang sử dụng WKWebView. Tôi thích giải pháp hack của bạn. Tôi hy vọng nó hoạt động! :)
Abdullah Umer

Tôi không thể khắc phục sự cố trên UIWebView trên phiên bản beta dành cho nhà phát triển
iOS13.2.2
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.