2013-10-24 13 views
5

Tôi đang cố gắng tải một tệp Keynote lớn (~ 150MB) vào một số UIWebView và tôi tiếp tục nhận được cảnh báo bộ nhớ và ứng dụng của tôi bị treo.iOS - SDK - Làm cách nào để mở các tệp tin chính trong UIWebView?

Có cách nào khác không?

Cách thích hợp để mở tệp lớn như thế nào mà không cần mở chúng trong một ứng dụng khác?

+1

Xin chào, tôi cũng đang gặp phải vấn đề tương tự. Bạn có tìm thấy giải pháp nào cho điều này không? – Ilanchezhian

Trả lời

1

Khi bạn mở tệp trong UIWebView trực tiếp từ url, nội dung tải xuống được lưu trữ tạm thời trong RAM. RAM là không gian dùng chung cho toàn bộ thiết bị, mà phải thực hiện các tác vụ khác liên quan đến hệ điều hành. Do đó ứng dụng của bạn đang bị iOS phá hủy do áp lực bộ nhớ & khủng hoảng tài nguyên.

Bạn nên trực tiếp ghi nội dung của mình vào tệp trong NSDocumentsDirectory ở chế độ nền & tải tệp này sau UIWebView sau đó.

Với kiến ​​thức của tôi, tôi có thể đề xuất cho bạn những điều sau đây.

Các tải Phần

Các Preview Phần

Hy vọng rằng sẽ giúp.

+0

Cảm ơn câu trả lời của bạn. Vấn đề thực tế là, tệp đã được tải xuống thư mục tài liệu. Với đường dẫn tệp đó, tôi đã tạo yêu cầu url và tải tệp trong chế độ xem web. Chỉ có, nó đang bị rơi. – Ilanchezhian

+0

Tôi sẽ nói ở đây, để kiểm tra trường hợp sử dụng này với một số tệp khác là 100 + mb. Kiểm tra xem điều đó có mở không. Có thể là PDF hoặc một số tài liệu. Nó có thể bị hỏng tệp dẫn đến sự cố. –

+0

Để kiểm tra trường hợp sử dụng này, tôi cũng đã thử nghiệm với một tệp doc. Và nó đang rơi. Quan trọng hơn, tài liệu không bị hỏng. – Ilanchezhian

0

Nếu đó là một tệp lớn, bạn không thể/không nên sử dụng UIWebView.

Tại sao? Tôi đã cố gắng để hiển thị một tập tin tài liệu (docx) với một vài hình ảnh và ứng dụng của tôi đã bị rơi, sau khi ném một cảnh báo bộ nhớ. Lý do rất đơn giản. Mặc dù kích thước tệp là ~ 2,5 MB, thiết bị không có đủ bộ nhớ RAM/bộ nhớ để hiển thị tất cả hình ảnh bitmap (được nhúng trong tài liệu). Gỡ lỗi vấn đề bằng cách sử dụng Instruments cho thấy bộ nhớ ứng dụng đã tăng từ 30 MB lên 230 MB. Tôi tưởng tượng bạn đang trải qua một cái gì đó tương tự.

Giải pháp có thể:

  1. Không cho phép người dùng mở các file lớn trên các thiết bị di động của họ. Hoặc là, hoặc tạm dừng/tạm dừng quá trình tải UIWebView khi bạn nhận được cảnh báo bộ nhớ.

    - (void)didReceiveMemoryWarning { 
        [super didReceiveMemoryWarning]; 
    
        if ([self.webView isLoading]) { 
         [self.webView stopLoading];   
        } 
    } 
    
  2. Hãy thử sử dụng phương pháp [UIApplication sharedApplication] openURL:] để thay thế.

  3. Hãy thử sử dụng UIDocumentInteractionController để thay thế.

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

Lưu ý: Tôi đã không cố gắng mở một tập tin chủ đạo bằng cách sử dụng phương pháp nêu trên. Để sử dụng UIDocumentInteractionController, trước tiên bạn sẽ phải tải tệp xuống.

Hy vọng điều này sẽ hữu ích.

Các vấn đề liên quan