2012-09-28 63 views
11

En iOS 6, QLPreviewController ya no carga un PDF desde una URL. Funciona bien en iOS 5. He implementado los métodos QLPreviewControllerDataSource como se documentó en here.QLPreviewController no funciona en iOS 6

#pragma mark - QLPreviewControllerDataSource 
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller { 
    return 1; 
} 

- (id <QLPreviewItem>) previewController: (QLPreviewController *) controller previewItemAtIndex: (NSInteger) index; 
{ 
    NSURL *fileURL = [NSURL URLWithString:@"http://www.bliley.net/XTAL/PDF_Instructions/Test_File.pdf"]; 
    return fileURL; 
} 

Esto funciona perfectamente en iOS 5, sin embargo, en iOS 6 las salidas de la consola:

Couldn't issue file extension for path: /XTAL/PDF_Instructions/Test_File.pdf 
+0

¿No es realmente necesario utilizar una URL de archivo local? Me parece que está utilizando una URL remota y está cometiendo un error con todo después de http: // host/portion. – valheru

+0

alguien me dijo que en ios 6 implementaron un control más estricto para este método que la url más comienza con 'file: //', pero no puedo encontrar ninguna documentación sobre él. Si alguien sabe de una referencia, por favor publique. – MikeIsrael

+0

¿Encontró una solución? si es así, compártelo o acepta una respuesta. Gracias –

Respuesta

8

¿Ha intentado utilizar fileURLWithPath en lugar de URLWithString? Tuve otros problemas que se solucionaron al hacerlo.

Además, no estoy seguro de si QLPreviewController administrará las URL remotas. De lo contrario, podría descargar el archivo y luego visualizarlo.

+1

fileURLWithPath solucionó mi problema! ¡Gracias! –

+0

Ya tengo una aplicación en la tienda de aplicaciones. Funciona bien en iOS 5. Pero ya no funciona. Necesito cambiar todo para que funcione? Qué gran "actualización" por parte de Apple. –

4

Estoy teniendo un problema similar y parece que podría deberse a una aplicación más estricta del tipo de archivo URL de QLPreviewItem

@property (readonly) NSURL *previewItemURL; 
Discussion 
This property is used by a Quick Look preview controller to get an item’s URL. In typical use, you would implement a getter method in your preview item class to provide this value. 

The value of this property must be a file-type URL. 

If the item is not available for preview, this property’s getter method should return nil. In this case, the Quick Look preview controller displays a “loading” view. 

Availability 
Available in iOS 4.0 and later. 
Declared In 
QLPreviewItem.h 

ACTUALIZACIÓN: He abierto un bug con Apple tratamiento de este tema para iOS 6 y parece que lo han solucionado como un error, por lo que pueden ofrecer una solución en el futuro cercano. El error que abrí tenía que ver con el uso de NSURLProtocols personalizados para la vista previa, pero también puede aplicarse a otros aspectos.

Link to class

+0

Todavía no hay actualización de Apple, pero pude trabajar en UIWebView y reemplazar urlprotocol para cargar el archivo – MikeIsrael

7

he descargado el archivo desde el URL remota y guardados localmente, entonces puedo mostrar el archivo PDF utilizando el QLPreviewController .En iOS 6 su trabajo.

En primer lugar me guarda el archivo de URL remota utilizando el siguiente código:

NSString *local_location; 

    NSString *path = [[NSBundle mainBundle] pathForResource:@"sampleData" ofType:@"plist"]; 
     path = NSTemporaryDirectory(); 
    local_location= [path stringByAppendingPathComponent:[NSString stringWithFormat:@"My_Invoice.pdf"]]; 
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString: remoteurl]]; 
     [request setDownloadDestinationPath:local_location]; 
     [request startSynchronous]; 

Para mostrar el PDF:

QLPreviewController* preview = [[QLPreviewController alloc] init]; 
     preview.dataSource = self; 
     [self presentModalViewController:preview animated:YES]; 
métodos

QLPreviewController delegados son:

- (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller 
{ 
    return 1; 
} 

- (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index 
{ 

    return [NSURL fileURLWithPath:local_location]; 


} 
+2

Solo mis dos centavos: también obtiene el error "No se pudo emitir la extensión de archivo para la ruta" si el archivo apunta por la URL no existe. Entonces, si descargas el archivo y das una URL incorrecta a QLPreviewController, obtendrás el mismo error. Por qué harías eso ? Bueno, bichos tontos pasan ... –

+0

@ SébastienNussbaumer No recibí este error en mi proyecto. una vez que revises tu camino. – Suresh

+1

Lo siento, no quise decir que esto sucedió en su proyecto, solo que sucedió en el mío y quería dejar saber a otros lectores que es una buena idea comprobar que el archivo existe :) –

0

Pero nota que QLPreviewController espera una URL a un recurso local

Debería descargar primero y guardar el archivo PDF localmente y luego crear una URL de archivo adecuada para el archivo local.

Cuestiones relacionadas