iphone – 使用QuickLook框架或UiDocumentInteractionController显示加密文件

我在本地存储了加密的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

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...