2011-01-11 12 views
11
When I try to click the menu action button in QLPreviewController the application crashes. 

Esto es lo que estoy haciendo en el método delegadoaplicación se bloquea en iPhone- clic del botón de acción de menú en QLPreviewController IOS 4.2

- (id)previewController:(QLPreviewController *)previewController previewItemAtIndex:(NSInteger)index 
{ 

    NSMutableString*Url = [[NSMutableString alloc] initWithFormat:@"http://10.30.24.21/Documents/abc.doc]; 

    NSURL *fileURL; 
    fileURL = [NSURL URLWithString:Url];// the url of the file which is present in NAS device 
    [Url release]; 
    return fileURL; 
} 

Este es el informe de bloqueo

2011-01-11 12:21:36.717 iLink[5548:207] *** Assertion failure in -[UIDocumentInteractionController setURL:], /SourceCache/UIKit_Sim/UIKit-1447.6.4/UIDocumentInteractionController.m:1060 
2011-01-11 12:21:36.720 iLink[5548:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UIDocumentInteractionController: invalid scheme https. Only the file scheme is supported.' 

Cuando Intento obtener una vista previa de un archivo presente localmente, el botón de acción del menú no está bloqueado.

no voy a estar utilizando

NSURL *fileURL; 
    fileURL = [NSURL fileURLWithPath:filePath];// filePath is local file path. 

Entendí que cuando previsualizar los archivos locales ([NSURL fileURLWithPath: rutaArchivo]) menú de acción de clic de botón no está fallando ,, cuando previsualizar archivos desde un servidor ([ Botón de acción de menú NSURL URLWithString: Url]) haga clic en bloqueos.

Tengo dos preguntas, 1. ¿Podemos deshabilitar el botón de acción del menú? 2. ¿Hay alguna manera de evitar el bloqueo usando [NSURL URLWithString: Url]?

Gracias

Respuesta

2

¿Hay alguna manera de evitar el accidente usando [NSURL URLWithString: URL]?

Primero descargue el archivo a su sistema de archivos local.

+0

El objetivo de la aplicación es no descargar archivos. es solo para obtener una vista previa de los archivos que están presentes en el dispositivo NAS mediante URL. –

+0

no se puede obtener una vista previa de un archivo sin recuperarlo del servidor. Al menos no si quiere usar UIDocumentInteractionController. El controlador necesita el archivo en el sistema de archivos local para funcionar. –

+0

La vista previa no es un problema para mí incluso si uso [NSURL URLWithString: Url] Puedo ver los archivos. Es solo que la aplicación falla cuando hago clic en el botón de acción del menú. ¿Puede darme alguna solución para que la aplicación no se cuelgue? ¿Puedo manejar de todos modos ese botón de acción del menú clic? –

34

necesidad de utilizar

[NSURL fileURLWithPath:urPath] 
+0

Esta respuesta es la respuesta correcta. –

0

Por cierto su estado de
NSMutableString*Url = [[NSMutableString alloc] initWithFormat:@"http://10.30.24.21/Documents/abc.doc]; tiene un error de errores. Se ha perdido una "para indicar el final de la cadena url

8

Si bien las respuestas anteriores han dado la respuesta técnica correcta, quería elaborar más.

Los documentos de la API para QLPreviewItem dicen que la URL debe ser una -tipo de archivo URL del NSURL docs dicen que significa "utiliza el esquema de file:".

también puede leer un poco más de la guía Document Interaction Progamming que menciona que el QuickLook se supone que le dará más control que una UIDocumentInteractionController, ya que permite decide la forma en que se presenta, pero trae consigo las mismas suposiciones de que ya tiene un archivo localmente y simplemente desea una forma de mostrarlo y (con QuickLook) imprimirlo con AirPrint.

En su caso, puede tener más sentido para descargar el archivo en el directorio de la aplicación Caches, a continuación, abra la vista previa QL - que ya está siendo descargado por la vista previa todos modos, por lo que también podría agarrarlo por lo que también se puede imprimir.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
// Here you'll _probably_ want to use a filename that's got the correct extension...but YMMV 
NSURL *cacheURL = [NSURL fileURLWithPath:[[paths objectAtIndex:0] stringByAppendingPathComponent: @"current.pdf"]]; 

Ahora tome su URL original y descargar los contenidos y guardarlos en cacheURL.Si utiliza ASIHTTPRequest, que se ve así:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:originalURL]; 
[request setDownloadDestinationPath:[cacheURL path]]; 
// Yup. You could optimize here if needed... 
[request startSynchronous]; 

Y entonces se utiliza la URL del archivo en la vista QuickLook ...

- (id)previewController:(QLPreviewController *)previewController previewItemAtIndex:(NSInteger)index { 
    // Assuming you've saved this somewhere, etc... 
    return self.cacheURL; 
} 

En este escenario, cada nuevo PDF que se mire desde su NAS sobrescribe el anterior (mismo nombre, mismo directorio), por lo que limita el uso del disco. Obviamente, hay muchas formas de manejar ese problema, así que elija uno que sea apropiado para usted. La clave, sin embargo, es descargar el archivo localmente y mantenerlo al menos hasta que la vista de QL haya sido descartada.

0

Pude mostrar archivos PDF utilizando el esquema HTTP. La aplicación se bloquea cuando un usuario presiona el botón Imprimir. Así que necesitaba una forma de mostrar el PDF a través de HTTP y como una penalización necesaria para desactivar el botón de impresión. Desactivar los botones en una subclase en viewDidAppear Aquí está mi código

@interface PreviewController : QLPreviewController 
@end 

@implementation PreviewController 
-(void) viewDidAppear:(BOOL)animated { 
    self.navigationItem.rightBarButtonItem = nil; 
} 
@end 

y se utiliza como código:

// use the new class 
QLPreviewController *previewController = [[PreviewController alloc] init]; 
previewController.delegate = self; 
previewController.dataSource = self; 
[self.navigationController pushViewController:previewController animated:FALSE]; 
Cuestiones relacionadas