8
votes

Anyone able to help me out with this crash? It happens intermittently when switching back and forth between some UIWebView instances while they are loading.

The crash is often slightly different, but it's always a crash of the "WebThread" with a similar stack trace.

Here's the relevant parts of two crashes:

Date/Time:       2011-11-08 14:29:01.165 -0500
OS Version:      iPhone OS 5.0 (9A334)
Report Version:  104

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000006
Crashed Thread:  4

Thread 4 name:  WebThread
Thread 4 Crashed:
0   ???                             0x00000006 0 + 6
1   WebCore                         0x32a36154 -[QuickLookHandleAsDelegate connection:didReceiveData:lengthReceived:] + 72
2   QuickLook                       0x30bee2c2 -[QLThreadInvoker connectionDidReceiveDataLengthReceived:] + 90
3   CoreFoundation                  0x3537a226 -[NSObject performSelector:withObject:] + 38
4   Foundation                      0x32ce2752 __NSThreadPerformPerform + 346
5   CoreFoundation                  0x353efafe __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 10
6   CoreFoundation                  0x353ef2ca __CFRunLoopDoSources0 + 210
7   CoreFoundation                  0x353ee070 __CFRunLoopRun + 648
8   CoreFoundation                  0x353714d8 CFRunLoopRunSpecific + 296
9   CoreFoundation                  0x353713a0 CFRunLoopRunInMode + 100
10  WebCore                         0x324c912a _ZL12RunWebThreadPv + 398
11  libsystem_c.dylib               0x35ba1c18 _pthread_start + 316
12  libsystem_c.dylib               0x35ba1ad4 thread_start + 4
Date/Time:       2011-11-08 15:09:01.410 -0500
OS Version:      iPhone OS 5.0 (9A334)
Report Version:  104

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000034
Crashed Thread:  4

Thread 4 name:  WebThread
Thread 4 Crashed:
0   ???                             0x00000034 0 + 52
1   CoreFoundation                  0x3537a226 -[NSObject performSelector:withObject:] + 38
2   Foundation                      0x32ce2752 __NSThreadPerformPerform + 346
3   CoreFoundation                  0x353efafe __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 10
4   CoreFoundation                  0x353ef2ca __CFRunLoopDoSources0 + 210
5   CoreFoundation                  0x353ee070 __CFRunLoopRun + 648
6   CoreFoundation                  0x353714d8 CFRunLoopRunSpecific + 296
7   CoreFoundation                  0x353713a0 CFRunLoopRunInMode + 100
8   WebCore                         0x324c912a _ZL12RunWebThreadPv + 398
9   libsystem_c.dylib               0x35ba1c18 _pthread_start + 316
10  libsystem_c.dylib               0x35ba1ad4 thread_start + 4
3

3 Answers

7
votes

I see that you have iOs 5.0. Are the files that you're loading Office documents (docx, xls)?

If so, then your case is the same as mine. This problem reproduces only on systems with 5.0 (iPad and iPad 2 here), and happens when you try to stop UIWebView object before it finishes loading the file. Whether it's by calling stopLoading or loadRequest

This doesn't happen with txt files.

And if it does, it originates in WebThread starting from line:

#1  0x34912158 in -[QuickLookHandleAsDelegate connection:didReceiveData:lengthReceived:] ()

and jumping to some random pointers like:

#0  0x00000010 in 0x00000010 ()
4
votes

To expand on @K1w1Geek's answer, the problem may be that the user is closing the web view just before it tries to send a delegate callback and it crashes because it doesn't exist. This doesn't necessarily have to be related to loading a particular document type because I'm experiencing this crash just navigating a Salesforce website.

So if you have a close button, try to stop loading and set the delegate to nil before closing:

- (IBAction)btnCloseWebviewTap:(id)sender{
    [_webView stopLoading];
    _webView.delegate = nil;
    [self dismissViewControllerAnimated:YES completion:nil];
}
2
votes

Check that your UIWebViewDelegate delegate is still valid (ie. not released) if your UIWebView is in the background. This problem may be caused by the webview trying to call your delegate with

- (void)webViewDidFinishLoad:(UIWebView *)webView;

in the background after loading has completed.