Nhiệm vụ của tôi là hiển thị các loại tài liệu được hỗ trợ trên iPhone có OS 3.x, chẳng hạn như .pdf, .rtf, .doc , .ppt, .png, .tiff, v.v.UIWebView iPhone: loadData không hoạt động với một số loại nhất định (Excel, MSWord, PPT, RTF)
Bây giờ, tôi đã lưu trữ các tệp này chỉ được mã hóa trên đĩa. Vì lý do bảo mật, tôi muốn tránh lưu trữ chúng không được mã hóa trên đĩa.
Do đó, tôi thích sử dụng loadData:MIMEType:textEncodingName:baseURL:
thay vì loadRequest:
để hiển thị tài liệu vì loadData
cho phép tôi để vượt qua các nội dung trong một đối tượng NSData, tức là tôi có thể giải mã các tập tin trong bộ nhớ và không cần phải lưu trữ nó trên đĩa, như nó sẽ được yêu cầu khi sử dụng loadRequest
.
Vấn đề là loadData
không xuất hiện để làm việc với tất cả các loại tập tin:
kiểm tra cho thấy tất cả các loại hình ảnh có vẻ làm việc PDF tốt, cũng như, trong khi các loại phức tạp hơn thì không. Tôi gặp lỗi như:
NSURLErrorDomain Code=100
NSURLErrorDomain Code=102
WebView dường như cần URL thực sự hoạt động để truy cập tài liệu, mặc dù tôi đã cung cấp tất cả nội dung qua đối tượng NSData.
Dưới đây là đoạn code tôi sử dụng để hiển thị các nội dung:
[webView loadData:data MIMEType:type textEncodingName:@"utf-8" baseURL:nil];
Các mime-type được thiết lập đúng cách, ví dụ để "application/msword" cho các tệp .doc.
Có ai biết cách tôi có thể nhận được loadData
để làm việc với tất cả các loại mà loadRequest hỗ trợ không? Hoặc, cách khác, có cách nào tôi có thể biết loại nào hoạt động cho chắc chắn (tức là bị xử phạt chính thức bởi Apple) với loadData? Sau đó, tôi có thể làm việc gấp đôi, tạo ra một tập tin tạm thời không mã hóa chỉ cho những trường hợp mà loadData sẽ không thích.
Cập nhật
Hình như tôi không phải là người đầu tiên chạy vào này. Xem ở đây:
http://osdir.com/ml/iPhoneSDKDevelopment/2010-03/msg00216.html
Vì vậy, tôi đoán, đó là hiện trạng, và không có gì tôi có thể làm gì về nó.
Có người đề nghị một công việc xung quanh mà có thể làm việc, mặc dù:
http://osdir.com/ml/iPhoneSDKDevelopment/2010-03/msg00219.html
Về cơ bản, ý tưởng là để cung cấp một máy chủ http nhỏ phục vụ các tập tin (từ bộ nhớ trong trường hợp của tôi), và sau đó sử dụng loadRequest. Mặc dù vậy, điều này có thể tốn nhiều bộ nhớ hơn vì cả máy chủ và webview có thể sẽ giữ toàn bộ nội dung trong bộ nhớ dưới dạng hai bản sao, ngược lại với việc sử dụng loadData, nơi cả hai sẽ chia sẻ cùng một đối tượng dữ liệu. (Tâm trí bạn, tôi sẽ phải giữ dữ liệu được giải mã trong bộ nhớ, đó là toàn bộ vấn đề ở đây).
Tôi cũng trải qua oddities khi làm việc với các tệp không phải html trong 'UIWebView'. Tôi sợ nó có vẻ như 'UIWebView' trong số những thứ khác nhìn vào URL cho tập tin nó đang cố gắng để tải. Tải với một tập tin tạm thời không được mã hóa với một URL tập tin có thể là bạn chỉ "an toàn" cách ra (theo như tôi biết). – alleus