2012-09-28 7 views
11

In iOS 6 il QLPreviewController non carica più un PDF da un URL. Funziona perfettamente con iOS 5. Ho implementato i metodi QLPreviewControllerDataSource come documentato here.QLPreviewController non funziona su 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; 
} 

Questo funziona perfettamente in iOS 5, ma in iOS 6 uscite per console:

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

Non richiede in realtà l'utilizzo di un URL di file locale? Mi sembra che tu stia utilizzando un URL remoto e che si verifichino errori in seguito a http: // host/porzione. – valheru

+0

qualcuno mi ha detto che in iOS 6 hanno implementato un controllo più severo per questo metodo che l'URL inizia più con 'file: //', ma non riesco a trovare alcuna documentazione su di esso. Se qualcuno conosce un riferimento, si prega di inviare. – MikeIsrael

+0

Hai trovato una soluzione? se è così, condividilo o accetta una risposta Grazie –

risposta

8

Hai provato a usare fileURLWithPath invece di URLWithString? Ho avuto altri problemi che sono stati risolti facendo così.

Inoltre non è sicuro che QLPreviewController gestirà gli URL remoti. In caso contrario, è possibile scaricare il file e quindi visualizzarlo.

+1

fileURLWithPath risolto il mio problema! Grazie! –

+0

Ho già un'applicazione in App Store. Funziona perfettamente con iOS 5. Ma non funziona più. Devo cambiare tutto per farlo funzionare? Che grande "aggiornamento" di Apple. –

4

Sto avendo un problema simile e sembra che potrebbe derivare da un'applicazione più rigorosa del file-digitare l'URL di 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 

UPDATE: Ho aperto un bug con Apple che fare con questo problema per iOS 6 e sembra che l'abbiano accolto come un bug, quindi potrebbe offrire una soluzione nel prossimo futuro. Il bug che ho aperto aveva a che fare con l'utilizzo di NSURLProtocols personalizzati per l'anteprima, ma potrebbe applicarsi anche ad altri aspetti.

Link to class

+0

Ancora nessun aggiornamento da Apple, ma è stato in grado di risolvere il problema lavorando usando UIWebView e sovrascrivendo urlprotocol per caricare il file – MikeIsrael

7

Ho scaricato il file da URL remoto e salvati in locale, quindi visualizzo il PDF utilizzando il QLPreviewController .In iOS 6 il suo funzionamento.

Prima ho salvato il file da URL remoto utilizzando il seguente codice:

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

Per mostrare il Pdf:

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

QLPreviewController delegato sono:

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

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

    return [NSURL fileURLWithPath:local_location]; 


} 
+2

Solo i miei due centesimi: si ottiene anche l'errore "Impossibile rilasciare il file per il percorso" se il file puntava dall'URL non esiste. Quindi, se scarichi il file e dai un URL sbagliato a QLPreviewController, otterrai lo stesso errore. Perché dovresti farlo ? Be ', stupidi bugs accadono ... –

+0

@ SébastienNussbaumer Non ho ricevuto questo errore nel mio progetto. una volta controlla il tuo percorso. – Suresh

+1

Scusate non volevo dire che questo è successo nel vostro progetto, solo che è successo nel mio e volevo far sapere agli altri lettori che controllare che il file esiste è una buona idea :) –

0

Ma nota che QLPreviewController prevede un URL per una risorsa locale

È necessario prima scaricare e salvare il file PDF in locale, quindi creare un URL file corretto per il file locale.