Notre application iPad peut afficher des documents et les enregistrer hors ligne en cas de besoin. J'ai une sous-classe QLPreviewController nommée DocumentViewController (nommée DVC à partir de maintenant) pour les montrer.Comment obtenir QuickLook pour afficher les fichiers hors-ligne?
Flux de travail de l'application: - L'utilisateur clique sur le nom d'un document et le DVC est activé pour afficher le document. - Le DVC télécharge le fichier hors ligne et le montre une fois terminé. (Ainsi l'URL HTTP est téléchargée, stockée hors ligne, et une URL hors ligne est renvoyée)
La chose étrange est, est que seuls les fichiers PDF fonctionnent avec l'URL hors ligne, et le reste se bloque .. (il fonctionne avec j'ai fait quelques tests et quand je mets le fichier: // avant le lien hors ligne l'application ne plante pas mais le DVC me donne quelques informations sur le fichier (comme si c'était un excellent 97-2004 document).
Donc, certaines informations sont transférées, mais je n'arrive pas à comprendre quel est le problème.
Voici quelques captures d'écran et ensuite du code.
code: Notez que le document est une classe de modèle avec des propriétés de document comme id, nom, type de fichier et URL.
//DVC QLPreviewController dataSource method for returning url
- (id <QLPreviewItem>) previewController: (QLPreviewController *) controller previewItemAtIndex: (NSInteger)index
{
[SaveHelper saveDocumentFileAndPropertyWithDocument:document];
//[SaveHelper getDocumentFileWithDocument:document]; without file://
//if I return document.documentUrl it is working with all files except iworks files)
return [SaveHelper getDocumentFileAsPathWithDocument:document]; //with file://
}
//SaveHelper methods
+ (NSString *)documentFilePathWithDocument:(Document *)document
{
return [[self documentFilePath] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@%d.%@", DOCUMENT_FILE_PREFIX, document.documentId, document.documentType]];
}
+ (NSURL *)saveDocumentFileAndPropertyWithDocument:(Document *)document
{
if([self saveDocumentPropertyWithDocument:document])
{
return [self saveDocumentFileWithDocument:document];
}
return nil;
}
+ (NSURL *)saveDocumentFileWithDocument:(Document *)document
{
NSData *data = [NSData dataWithContentsOfURL:document.documentURL];
NSString *fullPath = [self documentFilePathWithDocument:document];
if([[NSKeyedArchiver archivedDataWithRootObject:data] writeToFile:fullPath atomically:YES])
{
return [NSURL fileURLWithPath:fullPath];
}
return nil;
}
+ (NSURL *)getDocumentFileWithDocument:(Document *)document
{
return [NSURL fileURLWithPath:[self documentFilePathWithDocument:document]];
}
+ (NSURL *)getDocumentFileAsPathWithDocument:(Document *)document
{
return [NSURL fileURLWithPath:[@"file://" stringByAppendingPathComponent:[[self getDocumentFileWithDocument:document] absoluteString]]];
}
Si plus de code nécessaire, dites.
EDIT:
Lorsque vous vous connectez l'URL auge passé la méthode 'getDocumentFileAsPathWithDocument':
url: file:/var/mobile/Applications/xx-xx/Documents/documentFiles/file_20.pdf
url: file:/var/mobile/Applications/xx-xx/Documents/documentFiles/file_80.docx
Lorsque le fichier PDF fonctionne et les docx ne
Lorsque je tente de charger une image (jpg) du stockage local je reçois un écran noir avec ce message d'erreur:
warning: Unable to read symbols for /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.3.5 (8L1)/Symbols/System/Library/Frameworks/QuickLook.framework/DisplayBundles/Image.qldisplay/Image (file not found).
warning: No copy of Image.qldisplay/Image found locally, reading from memory on remote device. This may slow down the debug session.
EDIT:
Le webview ne fonctionne pas avec les URL locales. PDF est bien, mais les fichiers Office donne un message "Impossible de lire le document, le format de fichier est invalide". Les documents iWorks donnent la même erreur que le quicklook. Je pense que c'est quelque part à la sauvegarde et la charge du format, je les sauvegarde comme un NSDATA mais après cela il n'y a pas d'indice pour l'iPad pour voir si c'est par exemple un document Word (seulement l'extension).
Avez-vous essayé d'utiliser [NSURL fileURLWithPath: ...]? La façon dont vous gérez les URL de fichiers est très fragile. – rbrown
Je l'ai changé pour "retourner [NSURL fileURLWithPath: fullPath];" (Je mets à jour le code ci-dessus pour), mais j'ai toujours le même problème. – Justin