2012-05-02 11 views
5

Tôi có UIViewController chứa UIWebView mà tôi đang sử dụng để xem các tài liệu khác nhau. Đôi khi một tài liệu có thể được tải xuống không được UIWebView hỗ trợ (ví dụ: trang Excel 2.0 cũ). Hiện tại điều này gây ra kết quả đầu ra trong cửa sổ gỡ lỗi như sau:iOS UIWebView - ngoại lệ bẫy tải định dạng tệp không hợp lệ

ngoại lệ: CPMessageException: Định dạng tệp không hợp lệ.

EXCEPTION CPMessageException: (null)

Các webViewDidStartLoad phương pháp hỏa hoạn, nhưng không phải webViewDidFinishLoad hoặc didFailLoadWithError cháy.

Lỗi không làm hỏng ứng dụng, nhưng tôi muốn bẫy ngoại lệ này để cung cấp thông báo của riêng tôi cho người dùng. Ai có thể đề nghị làm thế nào để bẫy và xử lý này?

Rất cám ơn, Jonathan

+0

Không có đám cháy nào ở trên do ngoại lệ đã xảy ra hỏa hoạn. Có lẽ bạn có thể sử dụng \ @try ... \ @catch để giải quyết vấn đề này. –

+0

Xin chào, tôi đã thử sử dụng @try .. @ bắt xung quanh phương thức [webView loadRequest:] nhưng không có ngoại lệ nào bị bắt. Như tôi nói nó không thực sự gây ra các ứng dụng sụp đổ. –

+0

Vui lòng chuyển đến Sản phẩm> Chỉnh sửa Đề án ..> Tab Chẩn đoán> Chọn Bật đối tượng Zombie và hiển thị nhật ký sự cố cho chúng tôi với dòng mã của bạn mà vấn đề đã xảy ra – Sakares

Trả lời

1

Thật không may CPMessageException là một phần của các khuôn khổ riêng của Apple, trong trường hợp tập tin văn phòng, OfficeImport.framework. Điều này được ném khi khung công tác nhận được một tệp không sử dụng được.

Lý do khiến đơn đăng ký của bạn không bị lỗi là do ứng dụng có thể đang được xử lý trong chính mã nhập. Ngay cả thiết lập NSSetUncaughtExceptionHandler sẽ không hoạt động (như tôi đã thử trong quá khứ).

Cách tốt nhất để đi xung quanh này sẽ được sử dụng các phương pháp đại biểu shouldStartLoadWithRequest của UIWebView:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 

Ở đây bạn preemptively có thể ngăn chặn các tập tin khỏi bị nạp vào xem web và tránh một màn hình trống tránh khỏi thất bại.

(Am không chắc chắn nếu có một cách để đọc ra NSLog khi đang bay, do đó bạn có thể theo dõi nó Nhưng điều đó có lẽ không phải là một cách đúng đắn để làm điều đó.!)

Cập nhật: Chỉ cần nộp một lỗi liên quan đến điều này. Hãy để chúng tôi xem những gì các nhà phát triển Apple phải nói về điều này.