我在本地存储了加密的word / excel / pdf文件,我需要在我的iPad应用程序中预览.我知道QLPreviewController或UiDocumentInteractionController可用于预览这些文件.我很好用这个
- (id <QLPreviewItem>) previewController: (QLPreviewController *) controller previewItemAtIndex: (NSInteger) index { return [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:[documents objectAtIndex:index] ofType:nil]]; }
但是文件是加密的,当我解密它时,我会得到NSData对象.我如何在其中任何一个中加载NSData.
另外我理解我可以很好地将NSData存储为本地文件并将其加载到预览中.但是存在不在本地存储未加密文件的限制.
如果某人已经完成了这项工作并且可以帮助我,我们将不胜感激.
谢谢
AJ
解决方法
由于您使用的是快速查看,因此您的选项有限.您必须为Quick Look提供NSURL,这意味着它必须位于文件系统(或Internet)上.幸运的是,这应该不是什么大问题. iOS设备使用硬件级加密.当您的文件被加密时,只有您的应用程序具有解密它的密钥.因此,您的文件仍会加密,但您的应用程序和您的应用程序也可以读取它.
这是你做的:
>将文件解密为NSData对象,您已经完成了该操作.
>将文件写入不会上传到iCloud或iTunes备份的位置. tmp目录可能是最好的选择.代码看起来像这样:
NSData * data = // Your decrypted file data. NSString * fileName = // Whatever you want to name your file. NSString * path = [NSTemporaryDirectory() stringByAppendingPathComponent:fileName]; NSURL * url = [NSURL URLWithString:path]; NSError * error = nil; BOOL success = [data writeToURL:url options:NSDataWritingFileProtectionComplete error:&error]; if (success) { // Give the URL to Quick Look. } else { // An error happened. See the 'error' object for the details. }
此时您有一个NSURL,您可以使用快速查看.完成后,请不要忘记删除已解密的文件.
有关磁盘加密的一些注意事项:
>它仅在iOS 4.0上受支持.
>它可能不适用于“旧”设备.
>用户必须拥有有效的密码.
>如果使用NSDataWritingFileProtectionComplete,则在设备锁定时无法访问该文件.如果您需要在应用程序被锁定时访问该文件,则应使用NSDataWritingFileProtectionCompleteUnlessOpen或NSFileProtectionCompleteUntilFirstUserAuthentication.即使设备被盗和越狱,这仍然会给你很大的保护.但请注意,这些加密选项仅适用于iOS 5.0
有关磁盘加密的更多详细信息,请查看iOS App Programming Guide