Pregunta

Estoy usando qlpreviewController para obtener y ver un PDF remoto desde mi servidor. Esto funciona muy bien, ya que Apple construyó un buen gráfico de "carga" mientras se descarga el archivo. Ahora, también me gustaría usar uidocumentInteractionController que requiere un archivo local. Pero, dado que QlpreviewController ya descargó el archivo, me gustaría usarlo.

¿Hay alguna forma de obtener la ruta local al archivo que se descarga QlpreviewController?

QLPreviewController *previewController = [[QLPreviewController alloc] init];
previewController.dataSource = self;
previewController.delegate = self;
previewController.currentPreviewItemIndex = 0;
[[self navigationController] pushViewController:previewController animated:YES];
[previewController release];
// Where is the file stored?
¿Fue útil?

Solución

QLPreviewController no está realmente diseñado para descargar archivos, desde la documentación para QLPreviewItem:

@property (readonly) NSURL *previewItemURL;

Esta propiedad es utilizada por un controlador de vista previa de vista rápida para obtener la URL de un artículo. En uso típico, implementaría un método Getter en su clase de elemento de vista previa para proporcionar este valor.

El valor de esta propiedad debe ser una URL de tipo archivo.

Por lo tanto, realmente debería usar algo más para descargar el archivo. Puede funcionar con un recurso de red, pero no está diseñado para funcionar realmente con él. Ni siquiera estoy seguro de cómo lo está administrando, porque estaba bastante seguro de que un QuicklookScontroller equivocará si no aprobó una URL de archivo. Es probable que el controlador esté descargando el archivo a un directorio TEMP o directamente a la memoria. De cualquier manera, no está disponible para que lo use.

Debe descargar el archivo usted mismo y luego pasar el controlador de aspecto rápido una URL de archivo que le apunta. Puede usar una biblioteca de redes como ASIHTTP Si querías hacerlo más fácil para ti.

Otros consejos

Teníamos un escenario similar en el que el archivo que se muestra es remoto. Esto es lo que hicimos: establecemos la fuente de datos en nulo. Lo que esto hace es mostrar un icono de carga. En ViewDidload, inicializamos la solicitud remota y guardamos el archivo localmente. Una vez que se ha descargado el archivo, establecemos la fuente de datos correctamente y actualizamos la vista.

 //after file has been downloaded
 [self setDataSource:self];
 [self reloadData];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top