Używam QuickLook Framework w mojej aplikacji na iOS do podglądu różnych plików. Ostatnio zauważyłem, że QuickLook przechowuje pamięć podręczną wszystkich podglądanych plików w katalogu mojej aplikacji o nazwie tmp
. Istnieją jednak dwa problemy z buforowaniem plików QuickLook:Zapobieganie generowaniu pamięci podręcznej przez iOS QuickLook
Te buforowane pliki są już zapisane w katalogu Dokumenty. Więc teoretycznie aplikacja może podwoić rozmiar, jeśli użytkownik chce wyświetlić podgląd wszystkich swoich plików (które prawdopodobnie będą). W porządku, nic wielkiego, mogę okresowo wyczyścić pamięć podręczną za pomocą tego kodu:
NSFileManager *fileMgr = [NSFileManager defaultManager]; NSArray *fileArray = [fileMgr contentsOfDirectoryAtPath:NSTemporaryDirectory() error:nil]; for (NSString *filename in fileArray) { [fileMgr removeItemAtPath:[NSTemporaryDirectory() stringByAppendingPathComponent:filename] error:NULL]; }
Drugi i najważniejsze że QuickLook wydaje się być stworzenie wtórnego cache w folderze systemowym (nie moja aplikacja). Jest to problem, ponieważ użytkownicy mają możliwość szyfrowania pojedynczych plików w mojej aplikacji. Jeśli podglądają plik przed zaszyfrowaniem, wygląda to normalnie. Jeśli następnie zaszyfrują, a następnie przejdą do podglądu, plik nadal będzie wyglądał tak, jakby nie był zaszyfrowany. Wiem, że nie ma problemu z szyfrowaniem, ponieważ zaszyfrowany plik przechowywany w katalogu mojej aplikacji
Documents
jest zaszyfrowany i nie może być odczytany (poprawnie) przez żaden program. Jest to poważny problem, ponieważ może to spowodować, że użytkownik uwierzy, że plik nie został zaszyfrowany. Jest to również problem związany z bezpieczeństwem, ponieważ oznacza to, że QuickLook buforuje plik w innym miejscu.
Oto mój kod 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];
}
Czy ktoś wie, gdzie cache QuickLook jest, czy istnieje jeden (może to jakiś bug)?
Jak mogę zapobiec QuickLook z buforowania plików lub jak zresetować pamięć podręczną? Jeśli żadna z nich nie jest możliwa, istnieje alternatywa iOS 6 do QuickLook (słyszałem, że QuickLook został zmieniony w iOS 6, więc nie ma żadnych obejść, alternatyw, itp.)?
Wszelkie rozwiązania i pomysły doceniane!
Nie mam dla ciebie odpowiedzi innej niż "Nie widziałem ani jednego sposobu i użyłem" UIWebView "(pomimo gorszej funkcjonalności). Czy próbowałeś przesłać Apple prośbę o funkcję i zobaczyć, co powiedział? – DBD