2011-11-11 17 views
6

Chiunque può darmi una mano con questo crash? Accade a intermittenza quando si passa avanti e indietro tra alcune istanze di UIWebView mentre si stanno caricando.iOS UIWebView crash in "WebThread"

L'arresto anomalo è spesso leggermente diverso, ma è sempre un arresto anomalo del "WebThread" con una traccia dello stack simile.

Ecco gli elementi rilevanti di due cadute: (. Cioè non pubblicato)

 
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 

risposta

7

Vedo che si dispone di iOs 5.0. I file in cui stai caricando i documenti di Office (docx, xls)?

Se è così, il tuo caso è uguale al mio. Questo problema si verifica solo su sistemi con 5.0 (iPad e iPad 2 qui) e si verifica quando si tenta di arrestare l'oggetto UIWebView prima che termini il caricamento del file. Che si tratti chiamando stopLoading o loadRequest

Ciò non accade con i file txt.

E se lo fa, è originario WebThread a partire dalla linea:

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

e saltare per alcune indicazioni casuali come:

#0 0x00000010 in 0x00000010() 
+1

Sì, è esattamente quello che sto vedendo, e ho notato anche da più test che sta accadendo solo con i documenti di Office. Sai se questo bug è già stato inviato ad Apple? – Steve

+2

Ho segnalato questo come un bug per Apple e hanno detto che si trattava di un problema noto su cui stanno lavorando. Si spera che verrà risolto quando iOS 5.1 sarà pubblicato. – Steve

+0

Qual è il tuo link url del bug nel sistema di tracciamento delle microspie? – jianhua

2

Verificare che il delegato UIWebViewDelegate è ancora valido se il vostro UIWebView è in background. Questo problema può essere causato dal WebView cercando di chiamare il delegato con

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

in background dopo il caricamento è stato completato.

+0

Sì ho controllato per assicurarsi che questo non è il problema. I miei delegati o si attengono sempre o tolgo il puntatore webView.delegate prima di rilasciare il delegato. – Steve

+0

potresti fornire qualche codice sorgente? È difficile dire cosa sta succedendo. – Piotr

2

Ad ampliare @ di K1w1Geek risposta, il problema potrebbe essere che l'utente sta chiudendo la visualizzazione Web appena prima di tentare di inviare un callback delegato e si blocca perché non esiste. Questo non deve necessariamente essere correlato al caricamento di un particolare tipo di documento perché sto riscontrando questo crash semplicemente navigando in un sito Web di Salesforce.

Quindi, se si dispone di un pulsante di chiusura, cercare di fermare il carico e impostare il delegato a zero prima di chiudere:

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