UIWebView
に大きなKeynoteファイル(〜150MB)を読み込もうとしていて、メモリの警告とアプリケーションがクラッシュしています。iOS - SDK - UIWebViewで大きなキーノートファイルを開くにはどうすればよいですか?
方法はありますか?
このサイズのファイルを別のアプリで開かずに開くには、どのような方法が適していますか?
UIWebView
に大きなKeynoteファイル(〜150MB)を読み込もうとしていて、メモリの警告とアプリケーションがクラッシュしています。iOS - SDK - UIWebViewで大きなキーノートファイルを開くにはどうすればよいですか?
方法はありますか?
このサイズのファイルを別のアプリで開かずに開くには、どのような方法が適していますか?
URLから直接UIWebView
にファイルを開くと、ダウンロードしたコンテンツは一時的にRAMに保存されます。 RAMはデバイス全体の共有スペースであり、他のOS関連のタスクを実行する必要があります。したがって、あなたのアプリはメモリの圧力が&のリソース切れのためにiOSによって殺されています。
NSDocumentsDirectory
のファイルに内容を直接書き込むことをお勧めします。&ファイルをUIWebView
に後で読み込んでください。
私の知る限りでは、以下をお勧めします。
ダウンロードパート
プレビューパート
ため
あなたの答えをありがとう。実際の問題は、ファイルが既にdocsディレクトリにダウンロードされていることです。そのファイルパスで、私はurl要求を作成し、ファイルをwebviewにロードしました。そこだけで、それはクラッシュしています。 – Ilanchezhian
私はここで、100 + MBの他のファイルでこのユースケースをテストすると言うでしょう。それが開くかどうか確認してください。 PDFや何らかのドキュメントかもしれません。クラッシュするファイルが破損している可能性があります。 –
このユースケースをテストするために、私はすでにdocファイルでもテスト済みです。そして、それはクラッシュしています。さらに重要なことは、ドキュメントが破損していないことです。 – Ilanchezhian
大きなファイルの場合は、UIWebView
を使用することはできません。
なぜですか?私はいくつかの画像を含む文書ファイル(docx)を表示しようとしましたが、メモリ警告をスローした後、アプリケーションがクラッシュしていました。理由は簡単でした。ファイルサイズは約2.5 MBでしたが、デバイスには、(ドキュメントに埋め込まれた)すべてのビットマップイメージを表示するのに十分なRAM /メモリがありませんでした。 Instrumentsを使用して問題をデバッグすると、アプリケーションメモリが30MBから230MBに増加していたことがわかりました。私はあなたが似たようなことを経験していると思います。
可能なソリューション:
は、ユーザーが自分のモバイルデバイス上で大きなファイルを開くことができないでください。どちらか、または正常にメモリ警告を受け取ったときに、UIWebView
の読み込みプロセスを正常に停止/停止します。
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
if ([self.webView isLoading]) {
[self.webView stopLoading];
}
}
代わりに[UIApplication sharedApplication] openURL:]
メソッドを使用してみてください。
代わりに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];
}
}
注:私は、上記の方法を使用して、基調講演、ファイルを開くしようとしていません。 UIDocumentInteractionController
を使用するには、まずファイルをダウンロードする必要があります。
これが役に立ちます。
こんにちは、私も同じ問題に直面しています。このための解決策はありますか? – Ilanchezhian