Nuestra aplicación para iPad puede mostrar documentos y guardarlos fuera de línea cuando sea necesario. Tengo una subclase QLPreviewController llamada DocumentViewController (llamada a partir de ahora DVC) para mostrarlas.¿Cómo obtengo QuickLook para mostrar los archivos sin conexión?
Flujo de trabajo de la aplicación: - El usuario hace clic en el nombre de un documento y el DVC se presiona para mostrar el documento. - DVC descarga el archivo fuera de línea y lo muestra cuando haya terminado. (Por lo tanto, la URL HTTP se descarga, se almacena sin conexión y se devuelve una URL sin conexión)
Lo extraño es que solo los archivos PDF funcionan con la URL sin conexión y el resto falla ... (funciona con enlaces en línea)
Hice algunas pruebas y cuando coloque el archivo: // antes del enlace sin conexión, la aplicación no falla, pero el DVC me está dando cierta información sobre el archivo (como que es un excel 97-2004 documento).
Así que se transfiere algo de información, pero no puedo entender cuál es el problema.
Aquí hay algunas capturas de pantalla y, a continuación, algunos códigos.
código: Nota que el documento es una clase del modelo con las propiedades del documento como la identificación, nombre, tipo de archivo y 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 necesita más código, solo diga.
EDIT:
Al registrar la URL a través transcurrido el método '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
Si el archivo PDF está funcionando y los docx no
Cuando intento cargar una imagen (jpg) desde el almacenamiento local Aparece una pantalla en negro con este mensaje de error:
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.
EDITAR:
La vista web no funciona con las direcciones URL locales. PDF está bien, pero los archivos de Office dan un mensaje "No se puede leer el documento, el formato de archivo no es válido". Los documentos de iWorks dan el mismo error que el quicklook. Creo que es en algún lugar en el guardado y la carga del formato, los guardo como un NSDATA pero después de eso no hay ninguna pista para el iPad para ver si es, por ejemplo, un documento de Word (solo la extensión).
¿Ha intentado utilizar [NSURL fileURLWithPath: ...]? La forma en que maneja las URL de los archivos es muy frágil. – rbrown
Lo he cambiado a "return [NSURL fileURLWithPath: fullPath];" (Actualizo el código de arriba a), pero todavía tengo el mismo problema. – Justin