- [UIThreadSafeNode canPerformAction: withSender:]: örneğe tanınmayan seçici gönderildi


9

İOS uygulamamda bu çökme ile karşı karşıyayım.

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>

Şimdiye kadar 100'den fazla çökme bildirildi. Bu sadece iOS 12 ve iOS 13'te oluyor.

Bunun nasıl olduğunu ve nasıl çoğaltılacağını bulamıyorum.

Yığın izlemesi, uygulamamın kodlarından hiçbirini göstermiyor.

Tüm kilitlenme raporunu buraya yükledim .

Herhangi bir yardım çok takdir edilecektir.

Yanıtlar:


10

Bu, iOS metin girişindeki "ileri silme" ile ilgili eski bir hatanın gerilemesi gibi görünüyor: http://www.openradar.me/15114422

Yeni "yazmak için kaydır" klavyesi nedeniyle gerilediğine inanıyorum.

Düzeltmek için 2 seçeneğiniz var:

  1. Kullanımdan kaldırılmış UIWebView'inizi bir WKWebView'e yükseltin
  2. Hacky çözümü: eksik seçiciyi UIThreadSafeNodeçalışma zamanında takın .

Eksik seçiciyi nasıl ekleyeceğinize ilişkin bir kod örneği:

BOOL canPerformAction(id withSender) {
    return false;
} 

- (void)viewDidLoad {
   [super viewDidLoad];

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

Büyük olasılıkla yöntem eklemeyi AppDelegate'deki gibi yalnızca bir kez yüklenen bir yere koymalısınız.

İhtiyacınız varsa tam örnek proje: https://github.com/elliotfiske/UIWebView-TextEntry-CrashFix/tree/master

Nasıl çoğaltılır:

UIWebView içinde bir metin giriş formu oluşturun, bazı kelimeler yazın, ardından imleci cümlenin ortasındaki bir kelimenin tam END'ına taşıyın.

Ardından, tahmini metin önerilerinden herhangi birini seçin. Eylemdeki hatayı burada görün:Çökme reprodüksiyonunun ekran kaydı


2
WKWebView kullanıyorum. Hack çözümünü seviyorum. Umarım işe yarar! :)
Abdullah Umer

İOS13.2.2 geliştirici beta sürümündeki UIWebView'daki çökmeyi yeniden üretemiyorum
harshith7823
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.