Impedir que iOS QuickLook genere un caching

Estoy usando QuickLook Framework en mi aplicación iOS para get una vista previa de varios files. Hace poco me di count de que QuickLook mantiene un caching de todos los files previsualizados en el directory tmp mi aplicación. Existen dos problemas con los files de caching de QuickLook:

  1. Estos files almacenados en caching ya están almacenados en el directory de documentos. Por lo tanto, en teoría, la aplicación podría duplicarse si el usuario desea get una vista previa de todos sus files (que es probable que lo hagan). De acuerdo, no es gran cosa, puedo limpiar periódicamente el caching con este código:

     NSFileManager *fileMgr = [NSFileManager defaultManager]; NSArray *fileArray = [fileMgr contentsOfDirectoryAtPath:NSTemporaryDirectory() error:nil]; for (NSString *filename in fileArray) { [fileMgr removeItemAtPath:[NSTemporaryDirectory() stringByAppendingPathComponent:filename] error:NULL]; } 
  2. El segundo y más importante es que QuickLook parece estar creando un caching secundario en una carpeta del sistema (no en mi aplicación). Este es un problema porque los usuarios tienen la opción de cifrar files individuales en mi aplicación. Si obtienen una vista previa de un file antes de encriptar, parece normal. Si cifran y luego obtienen una vista previa después, el file sigue apareciendo como si no estuviera encriptado. Sé que no hay ningún problema con el encryption porque el file encryption almacenado en el directory de Documents mi aplicación está encriptado y no puede ser leído (correctamente) por ningún progtwig. Este es un problema importante, ya que puede hacer que el usuario crea que el file no fue encriptado. También es un problema de security porque significa que QuickLook está almacenando en caching el file en otro lugar.

Aquí está mi código 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 stonetworking user data and file name NSString *FileName = [defaults objectForKey:@"FileName"]; //Name of file stonetworking 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]; } 

¿Alguien sabe dónde está el caching de QuickLook o si hay uno (tal vez sea algún tipo de error)?

¿Cómo puedo evitar que QuickLook almacene en caching files o cómo puedo restablecer el caching? Si ninguno de estos es posible, existe una alternativa para iOS 6 a QuickLook (¿he escuchado que QuickLook se cambió en iOS 6 para que no haya soluciones, alternativas, etc.)?

¡Se aprecia cualquier solución o idea!

Si no hay una manera de evitar que QLPreviewController haga su propio almacenamiento en caching, es posible que desee considerar crear su propia versión QLPreviewController con una UIWebView (ya que es capaz de ver muchos types de files, como PDF, documentos, xls, etc.).

De ninguna manera es una solución ideal y no tendrá un nivel cercano al nivel de performance / calidad de la interfaz de usuario que proporcionará QLPreviewController. Sí … es un poco una solución pirateada, pero a exception de una API pública para borrar el caching secundario … es lo único que puedo pensar.

Supongo que es un lanzamiento entre la facilidad de uso + security.

¡Buena suerte!

Creo que puedes restablecer todo el caching desde el símbolo del sistema usando:

 qlmanage -r cache 

O genere una vista previa para documentos específicos usando:

 qlmanage -p document.ext 

Pero debido a que esta es una solución de línea de command, probablemente esto no sea lo que necesita. Buena suerte, sin embargo.

Tal vez intente con un NSURLCache y vea si eso ayuda.

Configurarlo en la aplicación didfinishlaunchingwithoptions:

 int cacheSizeMemory = 8*1024*1024; // 8MB int cacheSizeDisk = 16*1024*1024; // 16MB NSURLCache *shanetworkingCache = [[NSURLCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"]; [NSURLCache setShanetworkingURLCache:shanetworkingCache]; 

Luego puede hacer lo siguiente cuando desee vaciar el caching

 [[NSURLCache shanetworkingURLCache] removeAllCachedResponses]; 

Si esto funciona o no con una mirada rápida, no lo sé, pero vale la pena intentarlo.