【发布时间】:2011-02-15 10:07:04
【问题描述】:
我的任务是在装有 OS 3.x 的 iPhone 上显示支持的文档类型,例如 .pdf、.rtf、.doc、.ppt、.png、.tiff 等。
现在,我已将这些文件仅加密存储在磁盘上。出于安全原因,我想避免将它们未加密地存储在磁盘上。
因此,我更喜欢使用loadData:MIMEType:textEncodingName:baseURL: 而不是loadRequest: 来显示文档,因为loadData 允许我在NSData 对象中传递内容,即我可以在内存中解密文件而无需存储它在磁盘上,因为在使用 loadRequest 时需要它。
问题在于loadData 似乎不适用于所有文件类型:
测试表明,所有图片类型似乎都可以正常工作,PDF 也是如此,而更复杂的类型则不然。我收到如下错误:
NSURLErrorDomain Code=100
NSURLErrorDomain Code=102
WebView 似乎需要一个真正有效的 URL 才能将文档作为文件访问,尽管我已经通过 NSData 对象提供了所有内容。
这是我用来显示内容的代码:
[webView loadData:data MIMEType:type textEncodingName:@"utf-8" baseURL:nil];
mime-type 设置正确,例如.doc 文件的“应用程序/msword”。
有谁知道我如何让loadData 与 loadRequest 支持的所有类型一起工作?或者,有什么方法可以告诉我哪些类型确实可以使用 loadData(即 Apple 正式批准)?然后我可以双重工作,只为那些 loadData 不喜欢的情况创建一个临时未加密文件。
更新
看起来我不是第一个遇到这种情况的人。见这里:
http://osdir.com/ml/iPhoneSDKDevelopment/2010-03/msg00216.html
所以,我想,这就是现状,我对此无能为力。
有人提出了一种可能可行的解决方法:
http://osdir.com/ml/iPhoneSDKDevelopment/2010-03/msg00219.html
基本上,这个想法是提供一个小型 http 服务器来服务文件(在我的例子中是从内存中),然后使用 loadRequest。但是,这可能会占用更多内存,因为服务器和 webview 可能都将整个内容作为两个副本保存在内存中,而不是使用 loadData,两者都宁愿共享相同的数据对象。 (请注意,我必须将解密的数据保存在内存中,这就是重点)。
【问题讨论】:
-
在
UIWebView中处理非 html 文件时,我也遇到了一些奇怪的事情。恐怕UIWebView似乎会查看它试图加载的文件的 URL。加载带有文件 URL 的临时未加密文件可能是您唯一的“安全”出路(据我所知)。