2012-10-03 11 views
6

Mi aplicación ha estado utilizando QLPreviewController para mostrar archivos de todos los tipos y en iOS 5.x parecía funcionar bien.iOS 6.0 Quicklook QLPreviewController errors with: "No se puede encontrar la vista previa para el proxy cargado"

Ahora, en iOS 6.0, aparece un error y muestra el controlador pero con un indicador de carga constante y nunca carga nada.

El error en el registro es: Imposible encontrar el elemento de previsualización para el proxy cargado: < QLPreviewItemProxy: 0x8dbf480 > - archivo: //localhost/Users/me/Library/Application%20Support/iPhone%20Simulator/6.0/Applications/ E6A58F8D-71F3-4C7A-B16E-4BA017E318E5/Documents/temp // Welcome.docx

¿Alguien más tiene este u otros problemas con el Quicklook en iOS 6.0? O alguna sugerencia de qué probar? Lo he intentado a través de iPhone y iPad con presionar el controlador y presentarlo.

Editar: También me acabo de dar cuenta de que la URL en cuestión (la que dicen que es mala) comienza no solo con file: // pero file: // localhost mientras que el archivo original acaba de comenzar con una ruta real (es decir: archivo : /// Usuarios).

+0

Solo un poco más información: He intentado comprobar + canPreviewItem en el archivoUrl antes de devolverlo en previewItemAtIndex y devuelve VERDADERO. Entonces, de acuerdo con el Controlador antes de que regrese de ese método, la url es de hecho previsualizable ... tenga en cuenta que url es el que no tiene el host. – valheru

+0

Otra actualización: Intenté crear un nuevo proyecto que utiliza QLPreviewController. Circunstancias similares y descubrí que el raro error de Proxy aún ocurre ¡PERO el archivo se muestra! Entonces ahora necesito descubrir qué es diferente. Pero el hecho de que el error sigue ahí parece sospechoso aún. Sorprendido, más personas no han experimentado esto. – valheru

Respuesta

10

Bueno, después de un montón de investigación y recreación desde cero un visor QuickLook básico, encontré que el error todavía se registraba incluso a partir de eso, pero los documentos en realidad se muestran, que no eran de mi original proyecto.

Intenté poner el QLPreviewController dentro de NavigationController antes de presentarlo y terminé con el mismo problema. Estaba envolviendo el QLPreviewController en un UINavigationController antes de presentarlo porque parecía ser la forma de asignar al navigationItem un botón personalizado. Eso funcionó bien en iOS 5.1 (como se indicó anteriormente), pero aparentemente iOS 6.0 no le gusta esto.

Quitar el código adicional que envolvió QLPreviewController en un UINavigationController pareció permitir que el documento se muestre.

Ejemplo de controlador que se envolvió:

QLPreviewController* previewer = [[QLPreviewController alloc] init]; 
previewer.dataSource = self; 
previewer.delegate = self; 
[previewer setCurrentPreviewItemIndex:0]; 

UINavigationController* previewNavCtrl = [[UINavigationController alloc] init]; 
[previewNavCtrl pushViewController:previewer animated:NO]; 

[self presentModalViewController:previewNavCtrl animated:YES]; 

Cambiar a:

QLPreviewController* previewer = [[QLPreviewController alloc] init]; 
previewer.dataSource = self; 
previewer.delegate = self; 
[previewer setCurrentPreviewItemIndex:0]; 

[self presentModalViewController:previewer animated:YES]; 

Nota: de nuevo el error de Proxy todavía parece a aparecer en el registro sin embargo

también: Cualquier UIBarButtonItem las personalizaciones parecen no funcionar más sin NavigationController =/

ACTUALIZACIÓN: descubrí que el uso de fileURLWithpath para generar el archivoURL para previewItemAtIndex hacía desaparecer el error original. Sin embargo, ocurre el mismo problema donde el documento no se carga.

Un nuevo error (que he visto otras personas que tienen así) es:

No se pudo emitir extensión de archivo para la ruta: /Usuarios/Me/Library/Application Support% 20Support/iPhone % 20Simulator/6.0/Applications/339DDF48-AF93-41B5-B81E-A39440A131C6/Documents/temp/Welcome1.docx

INFORME FINAL DE ACTUALIZACIÓN: Bueno, el tema de extensión/error fue porque yo estaba tratando de añadir manualmente% 20 a los espacios (usando [NSString stringByAddingPercentEscapesUsingEncoding] etc) cuando el [NSURL fileURLWithPath] debe manejar eso ya. Una vez que eliminé eso, funcionó y ahora estoy en iOS 6 yay! Entonces, el problema real no tenía nada que ver con el UINavigationController, pero en realidad la URL del archivo se pasaba a través de previewItemAtIndex.

+0

Tengo el mismo problema. Pero la mía es url remota. ¿Que debería hacer? ¿Cualquier sugerencia? –

+0

He resuelto el error con: fileURLWithpath.De hecho, la aplicación se colgó cuando presioné el botón derecho. ¡¡Gracias!! – xarly

0

He descargado el archivo de la URL remota y guardado localmente, luego mostrar el PDF usando el QLPreviewController. En iOS 6 está funcionando.

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]; 


For showing the Pdf : 



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





QLPreviewController delegate methods are : 




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

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

    return [NSURL fileURLWithPath:local_location]; 


} 
0

1)

NSMutableArray * samplepdf = [[NSMutableArray alloc] initWithObjects: @ "sam1.pdf ", @" sam2.pdf ", @" sam3.pdf ", @" sam4.pdf ", nil];

// Arrastre el archivo pdf en fuerte Directorio TextDocument

2)

QLPreviewController * previewController = [[alloc QLPreviewController] init]; previewController.dataSource = self; previewController.currentPreviewItemIndex = [indexPath fila]; [self presentModalViewController: previewController animated: YES];

3) marca #pragma QLPreviewControllerDataSource

// Devuelve el número de elementos que el controlador de vista previa debe obtener una vista previa

- (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) previewController {

return [muestra del ejemplo de muestra];

}

// devuelve el elemento que el controlador de vista previa debe obtener una vista previa

- (id) previewController: (QLPreviewController *) previewController previewItemAtIndex: (NSInteger) Índice {

NSString * documentsDirectoryPath = [[NSBundle mainBundle] resourcePath];

NSString *dataPath =[documentsDirectoryPath stringByAppendingPathComponent:[samplepdf objectAtIndex:index]]; 

NSURL *url = [NSURL fileURLWithPath:dataPath isDirectory:YES]; 
return url; 

}

1

pensé para responder a esta vieja pregunta si alguien enfrentar mismo problema.

Al depurar una aplicación con Xcode, cada vez que cambia el UUID de la aplicación. Pero esto no es aplicable cuando la aplicación se carga desde el dispositivo.

Por ejemplo: Tengo las siguientes rutas para la misma aplicación.

Documento ruta: file: /// var/mobile/Applications/CBF533A7-C19A-4336-A92C-DC1A48242A8A/Documentos/ Documento ruta: file: /// var/mobile/Applications/ADB99D3B-EACA-482d -BB8A-0C12B340A044/Documentos/

Esto se puede superar mediante la adición siguiente en el nombre del archivo - (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index

NSString *documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSURL *localDocumentsDirectoryURL = [NSURL fileURLWithPath:documentsDirectoryPath]; 
NSURL *fileURL = [localDocumentsDirectoryURL URLByAppendingPathComponent:fileName isDirectory:NO]; 
return fileURL; 

* es sólo el nombre de archivo (medoc.pdf) donde se puede encontrar en la carpeta de documentos.

+0

Este fue mi problema. Estaba cometiendo el error de guardar la ruta completa de los documentos que incluía el UUID de la aplicación. – ppilone

Cuestiones relacionadas