2013-10-24 7 views
5

UIWebViewに大きなKeynoteファイル(〜150MB)を読み込もうとしていて、メモリの警告とアプリケーションがクラッシュしています。iOS - SDK - UIWebViewで大きなキーノートファイルを開くにはどうすればよいですか?

方法はありますか?

このサイズのファイルを別のアプリで開かずに開くには、どのような方法が適していますか?

+1

こんにちは、私も同じ問題に直面しています。このための解決策はありますか? – Ilanchezhian

答えて

1

URLから直接UIWebViewにファイルを開くと、ダウンロードしたコンテンツは一時的にRAMに保存されます。 RAMはデバイス全体の共有スペースであり、他のOS関連のタスクを実行する必要があります。したがって、あなたのアプリはメモリの圧力が&のリソース切れのためにiOSによって殺されています。

NSDocumentsDirectoryのファイルに内容を直接書き込むことをお勧めします。&ファイルをUIWebViewに後で読み込んでください。

私の知る限りでは、以下をお勧めします。

ダウンロードパート

プレビューパート

ため

  • TCBlobDownload競争力の大きなファイルのダウンロードに役立ちます願っています。

  • +0

    あなたの答えをありがとう。実際の問題は、ファイルが既にdocsディレクトリにダウンロードされていることです。そのファイルパスで、私はurl要求を作成し、ファイルをwebviewにロードしました。そこだけで、それはクラッシュしています。 – Ilanchezhian

    +0

    私はここで、100 + MBの他のファイルでこのユースケースをテストすると言うでしょう。それが開くかどうか確認してください。 PDFや何らかのドキュメントかもしれません。クラッシュするファイルが破損している可能性があります。 –

    +0

    このユースケースをテストするために、私はすでにdocファイルでもテスト済みです。そして、それはクラッシュしています。さらに重要なことは、ドキュメントが破損していないことです。 – Ilanchezhian

    0

    大きなファイルの場合は、UIWebViewを使用することはできません。

    なぜですか?私はいくつかの画像を含む文書ファイル(docx)を表示しようとしましたが、メモリ警告をスローした後、アプリケーションがクラッシュしていました。理由は簡単でした。ファイルサイズは約2.5 MBでしたが、デバイスには、(ドキュメントに埋め込まれた)すべてのビットマップイメージを表示するのに十分なRAM /メモリがありませんでした。 Instrumentsを使用して問題をデバッグすると、アプリケーションメモリが30MBから230MBに増加していたことがわかりました。私はあなたが似たようなことを経験していると思います。

    可能なソリューション:

    1. は、ユーザーが自分のモバイルデバイス上で大きなファイルを開くことができないでください。どちらか、または正常にメモリ警告を受け取ったときに、UIWebViewの読み込みプロセスを正常に停止/停止します。

      - (void)didReceiveMemoryWarning { 
          [super didReceiveMemoryWarning]; 
      
          if ([self.webView isLoading]) { 
           [self.webView stopLoading];   
          } 
      } 
      
    2. 代わりに[UIApplication sharedApplication] openURL:]メソッドを使用してみてください。

    3. 代わりに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を使用するには、まずファイルをダウンロードする必要があります。

    これが役に立ちます。

    関連する問題