2012-09-28 29 views
11

W systemie iOS 6 program QLPreviewController nie ładuje już pliku PDF z adresu URL. Działa dobrze w iOS 5. Zaimplementowałem metody QLPreviewControllerDataSource zgodnie z dokumentacją here.QLPreviewController nie działa w systemie 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; 
} 

Działa to doskonale w iOS 5, jednak w iOS 6 wyjściach konsoli:

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

Czy rzeczywiście nie wymaga użycia lokalnego adresu URL pliku? Wydaje mi się, że korzystasz ze zdalnego adresu URL i masz problem ze wszystkim po adresie http: // host /. – valheru

+0

Ktoś mi powiedział, że w iOS 6 zaimplementowano ściślejsze sprawdzanie tej metody, że adres URL najbardziej zaczyna się od "file: //", ale nie mogę znaleźć na nim żadnych dokumentacji. Jeśli ktoś wie o referencji, opublikuj. – MikeIsrael

+0

Czy znalazłeś rozwiązanie? jeśli tak, proszę podziel się nim lub przyjmij odpowiedź. Dzięki –

Odpowiedz

8

Czy próbowali za pomocą fileURLWithPath zamiast URLWithString? Miałem inne problemy, które zostały naprawione w ten sposób.

Nie jest również pewne, czy QLPreviewController obsługuje zdalne adresy URL. Jeśli nie, możesz pobrać plik, a następnie go wyświetlić.

+1

plikURLWithPath naprawił mój problem! Dzięki! –

+0

Mam już aplikację w App Store. Działa dobrze w iOS 5. Ale już nie działa. Muszę wszystko zmienić, żeby działało? Co za wspaniałe "ulepszenie" firmy Apple. –

4

mam podobny problem i wydaje się, że może to wynikać z ściślejsze egzekwowanie plik typu URL 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: I otworzyły błąd z jabłkiem radzenia sobie z tym problemem na iOS 6 i wygląda na to, że mają go jako błąd, więc może zaproponować poprawkę w najbliższej przyszłości. Błąd, który otworzyłem, dotyczył używania niestandardowych NSURLProtocols do podglądu, ale może również dotyczyć innych aspektów.

Link to class

+0

Nadal brak aktualizacji od Apple, ale udało się uzyskać pracę związaną z korzystaniem z UIWebView i przesłonięciem urlprotocol w celu załadowania pliku – MikeIsrael

7

Pobrałem plik ze zdalnego adresu URL i zapisywane lokalnie, a następnie wyświetlać PDF używając QLPreviewController .W iOS 6 swoją pracę.

pierwszy zapisany plik ze zdalnego adresu URL za pomocą następującego kodu:

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

Dla pokazując PDF:

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

QLPreviewController delegata są:

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

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

    return [NSURL fileURLWithPath:local_location]; 


} 
+2

Zaledwie dwa centy: otrzymasz komunikat "Nie można wydać rozszerzenia pliku dla ścieżki", jeśli plik wskazywał przez URL nie istnieje. Jeśli więc pobierzesz plik i podasz zły adres URL do QLPreviewController, otrzymasz ten sam błąd. Dlaczego chcesz to zrobić ? Cóż, głupie błędy się zdarzają ... –

+0

@ SébastienNussbaumer Nie dostałem tego błędu w moim projekcie. raz sprawdź swoją ścieżkę. – Suresh

+1

Przepraszam, nie chciałem powiedzieć, że stało się to w twoim projekcie, tylko że stało się to w moim i chciałem poinformować innych czytelników, że sprawdzenie, czy plik istnieje to dobry pomysł :) –

0

Ale uwaga że QLPreviewController oczekuje adresu URL do lokalnego zasobu

Najpierw należy pobrać i zapisać plik PDF lokalnie, a następnie utworzyć właściwy plik URL do lokalnego pliku.

Powiązane problemy