2013-10-24 15 views
5

Ich versuche, eine große Keynote-Datei (~ 150MB) in eine UIWebView zu laden und ich bekomme immer Speicherwarnungen und meine App stürzt ab.iOS - SDK - Wie öffne ich große Keynote-Dateien in UIWebView?

Gibt es einen Weg um dies?

Was ist der richtige Weg, um Dateien zu öffnen, die so groß sind, ohne sie in einer anderen App zu öffnen?

+1

Hallo, ich habe auch das gleiche Problem. Haben Sie eine Lösung dafür gefunden? – Ilanchezhian

Antwort

1

Wenn Sie eine Datei in UIWebView direkt von der URL öffnen, wird der heruntergeladene Inhalt vorübergehend im RAM gespeichert. Der RAM ist ein gemeinsamer Speicherbereich für das gesamte Gerät, der andere mit dem Betriebssystem zusammenhängende Aufgaben ausführen muss. Daher wird Ihre App von iOS wegen Speicherdruck & Ressource Crunch getötet.

Es ist ratsam, den Inhalt direkt in die Datei NSDocumentsDirectory im Hintergrund zu schreiben & laden Sie die Datei in UIWebView später.

Mit meinem Wissen kann ich Ihnen folgendes vorschlagen.

Der Download Part

Die Vorschau Part

Hoffnung, das hilft.

+0

Danke für Ihre Antwort. Das eigentliche Problem ist, dass die Datei bereits in das docs-Verzeichnis heruntergeladen wurde. Mit diesem Dateipfad habe ich eine URL-Anfrage erstellt und die Datei in die Webansicht geladen. Nur dort stürzt es ab. – Ilanchezhian

+0

Ich würde hier sagen, dass, um diesen Anwendungsfall mit einer anderen Datei von 100 + mb zu testen. Überprüfen Sie, ob sich das öffnet. Kann ein PDF oder ein Dokument sein. Es könnte eine beschädigte Datei sein, die zum Absturz führt. –

+0

Um diesen Anwendungsfall zu testen, habe ich bereits mit einer doc-Datei getestet. Und es stürzt ab. Noch wichtiger ist, dass das Dokument nicht beschädigt ist. – Ilanchezhian

0

Wenn es eine große Datei ist, können/sollten Sie nicht UIWebView verwenden.

Warum? Ich habe versucht, eine Dokumentdatei (docx) mit ein paar Bildern zu zeigen und meine Anwendung stürzte ab, nachdem ich eine Speicherwarnung geworfen hatte. Der Grund war einfach. Obwohl die Dateigröße ~ 2,5 MB betrug, verfügte das Gerät nicht über genügend RAM/Speicher, um alle Bitmap-Bilder (die in das Dokument eingebettet waren) anzuzeigen. Das Debuggen des Problems mithilfe von Instruments zeigte, dass der Anwendungsspeicher von 30 MB auf 230 MB anstieg. Ich kann mir vorstellen, dass Sie etwas Ähnliches erleben.

Mögliche Lösungen:

  1. nicht erlauben dem Anwender große Dateien auf ihren mobilen Geräten zu öffnen. Entweder das oder der Ladevorgang UIWebView wird angehalten/angehalten, wenn Sie eine Speicherwarnung erhalten.

    - (void)didReceiveMemoryWarning { 
        [super didReceiveMemoryWarning]; 
    
        if ([self.webView isLoading]) { 
         [self.webView stopLoading];   
        } 
    } 
    
  2. Versuchen Sie stattdessen [UIApplication sharedApplication] openURL:] Methode.

  3. Verwenden Sie stattdessen UIDocumentInteractionController.

    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]; 
        } 
    } 
    

Hinweis: Ich habe mit den oben genannten Methoden nicht versucht, eine Keynote-Datei zu öffnen. Um UIDocumentInteractionController zu verwenden, müssen Sie zuerst die Datei herunterladen.

Hoffe, das hilft.

Verwandte Themen