Подтвердить что ты не робот

EXC_BAD_ACCESS (SIGSEGV) в WebCore:: UserGestureIndicator:: processingUserGesture

У меня есть приложение iOS, созданное с использованием веб-узлов UIWebView и HTML5. Приложение испытывает, казалось бы, случайные сбои. Это произошло, когда пользователь взаимодействует с ним и во время тестов на долговечность, где не происходит взаимодействия между пользователем и приложением.

В журналах сбоев есть следующее:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x00000000

а журналы потоков содержат:

Thread XX name:  WebCore: Worker
Thread XX Crashed:
0   WebCore                         0x36c8c7a0 WebCore::UserGestureIndicator::processingUserGesture() + 20
1   WebCore                         0x36d7070a WebCore::DOMTimer::DOMTimer(WebCore::ScriptExecutionContext*, WTF::PassOwnPtr<WebCore::ScheduledAction>, int, bool) + 74
2   WebCore                         0x36d70616 WebCore::DOMTimer::install(WebCore::ScriptExecutionContext*, WTF::PassOwnPtr<WebCore::ScheduledAction>, int, bool) + 46
3   WebCore                         0x3753ae7e WebCore::WorkerContext::setTimeout(WTF::PassOwnPtr<WebCore::ScheduledAction>, int) + 30
4   WebCore                         0x3731ac02 WebCore::JSWorkerContext::setTimeout(JSC::ExecState*) + 194
5   WebCore                         0x37318ff6 WebCore::jsWorkerContextPrototypeFunctionSetTimeout(JSC::ExecState*) + 110
6   JavaScriptCore                  0x2fa9a1d8 llint_native_call_trampoline + 62
7   JavaScriptCore                  0x2faa355a JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&) + 66
8   WebCore                         0x36db0b16 WebCore::JSEventListener::handleEvent(WebCore::ScriptExecutionContext*, WebCore::Event*) + 558
9   WebCore                         0x36d6ebba WebCore::EventTarget::fireEventListeners(WebCore::Event*, WebCore::EventTargetData*, WTF::Vector<WebCore::RegisteredEventListener, 1ul, WTF::CrashOnOverflow>&) + 482
10  WebCore                         0x36c6da2a WebCore::EventTarget::fireEventListeners(WebCore::Event*) + 174
11  WebCore                         0x36e28824 WebCore::EventTarget::dispatchEvent(WTF::PassRefPtr<WebCore::Event>) + 60
12  WebCore                         0x3753e596 WebCore::MessageWorkerContextTask::performTask(WebCore::ScriptExecutionContext*) + 222
13  WebCore                         0x3753ec6e WebCore::WorkerRunLoop::runInMode(WebCore::WorkerContext*, WebCore::ModePredicate const&, WebCore::WorkerRunLoop::WaitMode) + 158
14  WebCore                         0x3753eb94 WebCore::WorkerRunLoop::run(WebCore::WorkerContext*) + 60
15  WebCore                         0x37540d64 WebCore::WorkerThread::workerThread() + 432
16  JavaScriptCore                  0x2fa4ba68 WTF::wtfThreadEntryPoint(void*) + 12
17  libsystem_pthread.dylib         0x397b6c5a _pthread_body + 138
18  libsystem_pthread.dylib         0x397b6bca _pthread_start + 98
19  libsystem_pthread.dylib         0x397b4ccc thread_start + 4

Мне удалось поймать исключение при броске, и из того, что я могу сказать, похоже, это ошибка структуры. См. Прилагаемый скриншот.

enter image description here

Большая часть прочитанного, кажется, указывает на то, что веб-просмотр отменяется до запуска делегата, но нигде в моем коде я dealloc!

Кто-нибудь сталкивался с этим или подобным случаем? Любая помощь очень ценится!

UPDATE

Я отправил отчет об ошибке в Apple после обращения в службу поддержки разработчиков. Их инженеры подтвердили это как ошибку.

4b9b3361

Ответ 1

В моем случае у меня есть аналогичная проблема.

Сбой WebView

Как многие из упомянутых, это может вызвать из-за того, что методы делегирования WebView вызываются, а веб-просмотр освобождается.

Чтобы исправить, нам нужно установить делегат как nil, а также остановить запрос webview при определенных методах

Вам нужно добавить строки кода

-(void)viewDidUnload{
    [super viewDidUnload];

    webViewRef.delegate = nil;
    [webViewRef stopLoading];

}

-(void)backBtnClicked{

    webViewRef.delegate = nil;
    [webViewRef stopLoading];

}

Надеюсь, это поможет вам.