Sto utilizzando il QuickLook Framework nel mio app iOS per visualizzare in anteprima i vari file. Recentemente ho notato che QuickLook mantiene una cache di tutti i file in anteprima nella directory tmp
della mia app. Esistono tuttavia due problemi con i file di cache QuickLook:Impedire iOS QuickLook di generare una cache
Questi file memorizzati nella cache sono già memorizzati nella directory Documenti. Quindi, in teoria, l'app potrebbe raddoppiare le dimensioni se l'utente desidera visualizzare in anteprima tutti i propri file (che probabilmente lo faranno). Va bene, non un grosso problema, posso periodicamente pulire la cache utilizzando questo codice:
NSFileManager *fileMgr = [NSFileManager defaultManager]; NSArray *fileArray = [fileMgr contentsOfDirectoryAtPath:NSTemporaryDirectory() error:nil]; for (NSString *filename in fileArray) { [fileMgr removeItemAtPath:[NSTemporaryDirectory() stringByAppendingPathComponent:filename] error:NULL]; }
Il secondo, e questione più importante è che QuickLook sembra essere la creazione di una cache secondaria in una cartella di sistema (non la mia app). Questo è un problema perché gli utenti hanno la possibilità di crittografare i singoli file nella mia app. Se visualizzano l'anteprima di un file prima della crittografia, sembra normale. Se criptano e poi visualizzano in anteprima, il file appare ancora come se non fosse crittografato. So che non c'è un problema con la crittografia perché il file crittografato memorizzato nella directory della mia app è crittografato e non può essere letto (correttamente) da alcun programma. Questo è un grosso problema, poiché potrebbe far credere all'utente che il file non sia stato crittografato. È anche un problema di sicurezza perché significa che QuickLook sta memorizzando il file altrove.
Ecco il mio codice 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];
}
Qualcuno sa dove la cache QuickLook è, o se ce n'è uno (forse è una specie di bug)?
Come posso impedire che QuickLook dalla cache dei file, o come posso ripristinare la cache? Se nessuna di queste sono possibili c'è un iOS 6 un'alternativa a QuickLook (ho sentito QuickLook è stato cambiato in iOS 6, in modo che non ci sono soluzioni alternative, alternative, ecc)?
Eventuali soluzioni o idee apprezzate!
Non ho una risposta per te diversa da "Non ho visto neanche una strada e ho usato un' UIWebView' "(nonostante le funzionalità peggiori). Hai provato a inviare una richiesta di funzione ad Apple e vedere cosa hanno detto? – DBD