我正在使用QuickLook框架在我的iOS应用程序预览各种文件。我最近注意到,QuickLook在我的应用程序的tmp目录中保存了所有预览文件的缓存。但是,QuickLook缓存文件有两个问题:
Documents目录中存储的加密文件是加密的,任何程序都无法正确读取。这是一个主要问题,因为它可能导致用户相信文件没有加密。这也是一个安全问题,因为这意味着QuickLook正在其他地方缓存文件。以下是我的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缓存在哪里,或者是否存在(可能是某种bug)?
如何防止QuickLook缓存文件,或者如何重新设置缓存?如果这两种方法都不可能,那么iOS 6是否可以替代QuickLook (我听说iOS 6中的QuickLook已被更改,因此没有任何解决办法、替代方案等)?
任何解决方案或想法都很感激!
发布于 2013-04-30 12:25:02
如果没有办法阻止QLPreviewController进行自己的缓存,您可能需要考虑使用UIWebView来制作自己的版本QLPreviewController (因为它能够查看许多文件类型,如PDF、docs、xls等)。
这绝不是一个理想的解决方案,而且您不会像QLPreviewController所提供的那样,拥有接近性能/UI质量的任何级别。嗯..。这是一个被黑客攻击的解决方案,但缺少一个公共API来清除二级缓存.这是我唯一能想到的。
我想这是用户友好性+安全性之间的混淆。
祝好运!
发布于 2013-04-30 12:26:26
我相信您可以使用以下方法从命令提示符重置整个缓存:
qlmanage -r cache或使用以下方法为特定文档生成预览:
qlmanage -p document.ext但是因为这是一个命令行解决方案,所以这可能不是您所需要的。不过祝你好运。
发布于 2013-04-30 14:24:51
也许尝试一个NSURLCache,看看这是否有帮助。
在应用程序中设置它,使用选项完成启动:
int cacheSizeMemory = 8*1024*1024; // 8MB
int cacheSizeDisk = 16*1024*1024; // 16MB
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"];
[NSURLCache setSharedURLCache:sharedCache];然后,当您想要清空缓存时,可以执行以下操作
[[NSURLCache sharedURLCache] removeAllCachedResponses];我不知道这是否行得通,但值得一试。
https://stackoverflow.com/questions/16122095
复制相似问题