2013-10-24 6 views

risposta

1

Quando si apre un file in UIWebView direttamente dall'URL, il contenuto scaricato viene memorizzato temporaneamente nella RAM. La RAM è uno spazio condiviso per l'intero dispositivo, che deve eseguire altre attività correlate al sistema operativo. Quindi la tua app viene uccisa da iOS a causa della pressione della memoria & scricchiolio delle risorse.

Si consiglia di scrivere direttamente il contenuto nel file in NSDocumentsDirectory in background & caricare il file in UIWebView in seguito.

Con le mie conoscenze posso suggerire quanto segue.

Il download Parte

L'anteprima Parte

Speranza che aiuta.

+0

Grazie per la risposta. Il vero problema è che il file è già stato scaricato nella directory docs. Con quel percorso file, ho creato la richiesta di url e caricato il file nella webview. C'è solo, si sta schiantando. – Ilanchezhian

+0

Direi qui, per testare questo caso d'uso con qualche altro file di 100 + mb. Controlla se si apre. Può essere un PDF o un documento. Potrebbe essere danneggiato il file che sta portando a crash. –

+0

Per testare questo caso d'uso, ho già provato con un file doc. E si sta schiantando. Ancora più importante, il documento non è danneggiato. – Ilanchezhian

0

Se si tratta di un file di grandi dimensioni, non è possibile/non utilizzare UIWebView.

Perché? Ho provato a mostrare un file di documento (docx) con un paio di immagini e la mia applicazione si è bloccata, dopo aver lanciato un avviso di memoria. La ragione era semplice. Sebbene la dimensione del file fosse ~ 2,5 MB, il dispositivo non aveva abbastanza RAM/memoria per visualizzare tutte le immagini bitmap (che erano incorporate nel documento). Il debugging del problema con gli strumenti ha mostrato che la memoria dell'applicazione stava passando da 30 MB a 230 MB. Immagino tu stia vivendo qualcosa di simile.

Possibili soluzioni:

  1. Non permettere all'utente di aprire file di grandi dimensioni sui propri dispositivi mobili. O questo, o con garbo ferma/ferma il processo di caricamento UIWebView quando ricevi un avviso di memoria.

    - (void)didReceiveMemoryWarning { 
        [super didReceiveMemoryWarning]; 
    
        if ([self.webView isLoading]) { 
         [self.webView stopLoading];   
        } 
    } 
    
  2. Prova utilizzando [UIApplication sharedApplication] openURL:] metodo, invece.

  3. Provare a utilizzare UIDocumentInteractionController invece.

    UIDocumentInteractionController *documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL:targetURL]; 
    documentInteractionController.delegate = self; 
    
    BOOL present = [documentInteractionController presentPreviewAnimated:YES]; 
    
    if (!present) { 
        // Allow user to open the file in external editor 
        CGRect rect = CGRectMake(0.0, 0.0, self.view.frame.size.width, 10.0f); 
        present = [documentInteractionController presentOpenInMenuFromRect:rect inView:self.view animated:YES]; 
    
        if (!present) { 
         UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" 
                      message:@"Cannot preview or open the selected file" 
                      delegate:nil 
                    cancelButtonTitle:NSLocalizedString(@"OK", nil) 
                    otherButtonTitles:nil, nil]; 
         [alertView show]; 
        } 
    } 
    

Nota: non ho provato ad aprire un file keynote utilizzando i metodi di cui sopra. Per utilizzare UIDocumentInteractionController, devi prima scaricare il file.

Spero che questo aiuti.