我在我的 iOS 应用程序中使用QuickLook 框架来预览各种文件。我最近注意到 QuickLook 在我的应用程序tmp
目录中保留了所有预览文件的缓存。不过 QuickLook 缓存文件有两个问题:
这些缓存文件已经存储在 Documents 目录中。所以理论上,如果用户想要预览他们的所有文件(他们可能会这样做),应用程序的大小可能会翻倍。好的,没什么大不了的,我可以使用以下代码定期清理缓存:
NSFileManager *fileMgr = [NSFileManager defaultManager]; NSArray *fileArray = [fileMgr contentsOfDirectoryAtPath:NSTemporaryDirectory() error:nil]; for (NSString *filename in fileArray) { [fileMgr removeItemAtPath:[NSTemporaryDirectory() stringByAppendingPathComponent:filename] error:NULL]; }
第二个也是最重要的问题是 QuickLook 似乎是在系统文件夹(不是我的应用程序)中创建二级缓存。这是一个问题,因为用户可以选择加密我的应用程序中的单个文件。如果他们在加密之前预览文件,它看起来很正常。如果他们加密然后预览,文件仍然显示为好像未加密。我知道加密没有问题,因为存储在我的应用程序
Documents
目录中的加密文件已加密,任何程序都无法(正确)读取。这是一个主要问题,因为它可能导致用户认为文件未加密。这也是一个安全问题,因为这意味着 QuickLook 正在将文件缓存在其他地方。
这是我的快速查看代码:
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller {
return 1;
}
- (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
//Get the stored user data and file name
NSString *FileName = [defaults objectForKey:@"FileName"]; //Name of file stored in NSUserDefaults
NSString *finalFilePath = [documentsDirectory stringByAppendingPathComponent:FileName];
return [NSURL fileURLWithPath:finalFilePath];
}
- (IBAction)previewFile:(id)sender {
//Setup QuickLook
QLPreviewController *previewController = [[QLPreviewController alloc] init];
previewController.delegate=self;
previewController.dataSource=self;
previewController.currentPreviewItemIndex = 0;
[previewController reloadData];
[self presentModalViewController:previewController animated:YES];
[previewController.navigationItem setRightBarButtonItem:nil];
}
有谁知道 QuickLook 缓存在哪里,或者是否有一个(可能是某种错误)?
如何防止 QuickLook 缓存文件,或者如何重置缓存?如果这些都不可能,是否有 iOS 6 替代 QuickLook(我听说 QuickLook 在 iOS 6 中已更改,因此没有任何解决方法、替代方案等)?
任何解决方案或想法表示赞赏!