objective-c ios6 qlpreviewcontroller

objective c - QLPreviewController no funciona en iOS 6



objective-c ios6 (4)

¿Has probado usar fileURLWithPath en lugar de URLWithString? Tuve otros problemas que se solucionaron al hacerlo.

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

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 documenta aquí .

#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 la consola genera:

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


Descargué el archivo de la URL remota y guardé localmente, luego visualicé el PDF usando QLPreviewController. En iOS 6, funciona.

Primero guardé el archivo de la URL remota usando 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];

Los métodos delegados de QLPreviewController son:

- (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller { return 1; } - (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index { return [NSURL fileURLWithPath:local_location]; }


Pero tenga en cuenta 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.


Tengo un problema similar y parece que podría deberse a una aplicación más estricta de la URL de tipo de archivo 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 error con Apple que trata este problema para iOS 6 y parece que lo han solucionado como un error, por lo que puede 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.

Enlace a la clase