2016-07-21 7 views
0

Ich speichere PDFs von JSON. Als ich in den Dateipfad im App Dokumente Verzeichnis navigieren, um zu überprüfen ich die richtige Datei haben, und versuchen, das PDF zu öffnen, ich nicht das PDF öffnen kann, und ich bekomme diese Fehlermeldung:PDF in Dokumente speichern (PDF ist beschädigt)

enter image description here

enter image description here

Der Dateipfad ist gut, das Dokument ist da, aber es wurde gerade beschädigt oder so etwas. Ich nehme an, das ist mit NSData verwandt, aber ich bin mir nicht sicher, was ich falsch mache. Irgendwelche Gedanken? Vielen Dank!

Viewcontroller:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    NSLog(@"Downloading PDF Started"); 

    // Get selected PDF 
    NSString *pdfSelected = self.pdfArray[indexPath.row]; 
    NSLog(@"PDFSl: %@", pdfSelected); 
    NSData *pdfData = [NSData dataWithContentsOfURL:[NSURL URLWithString:pdfSelected]]; 
    NSLog(@"PDFData: %@", pdfData); 
    NSString *pdfPath =[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@%ld.pdf",@"savedPDF", (long)indexPath.row]]; 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     [pdfData writeToFile:pdfPath atomically:YES]; 
     NSLog(@"PDF File Saved!"); 
     NSLog(@"PDF File Path: %@", pdfPath); 
     // Save PDF path in defaults for evaluation in Details 
     [defaults setObject:pdfPath forKey:@"cachedPDFPath"]; 
    }); 

}); 

JSON-Schnipsel:

{ 
     "fname": "Nadene", 
     "lname": "Feehan", 
     "email": "[email protected]", 
     "phone": "(152) 555-5321", 
     "image": "http://logok.org/wp-content/uploads/2014/04/Apple-logo-grey-880x625.png", 
     "video": "https://github.com/versluis/Movie-Player/blob/master/Movie%20Player/video.mov?raw=true", 
     "pdf": "http://adcdownload.apple.com/Developer_Tools/Xcode_8_beta_3/Release_Notes_for_Xcode_8_beta_3.pdf" 
    }, 

Console:

PDFSl:http://adcdownload.apple.com/Developer_Tools/Xcode_8_beta_3/Release_Notes_for_Xcode_8_beta_3.pdf

PDFDataLength: 2070

PDF File Path: /Users/user/Library/Developer/CoreSimulator/Devices/1/data/Containers/Data/Application/A/Documents/savedPDF0.pdf

ich auch versucht:

NSData *pdfData = [NSData dataWithContentsOfURL:[NSURL URLWithString:pdfSelected] options:NSDataReadingUncached error:&errorPDF]; aber wenn ich die Konsole überprüft den Fehler zu sehen, es gab keine PDFDataError: (null)

+0

Können Sie den Inhalt des Konsolenprotokolls anzeigen (insbesondere die Ergebnisse der Protokollanweisungen, die Sie anzeigen)? Wenn Sie 'PDFData' protokollieren, können Sie auch die Länge der Daten (d. H.' PdfData.length') protokollieren? Auch wenn das nichts Interessantes zeigt, können Sie versuchen, 'dataWithContentsOfURL: options: error:' anstelle des einfacheren 'dataWithContentsOfURL:' zu verwenden, um zu sehen, ob Sie tatsächlich und erfolgreich die Daten herunterladen. – fullofsquirrels

+0

@fullofsquirrels Kein Problem, nur das Konsolenprotokoll hinzugefügt. Fällt dir irgendetwas auf? – SRMR

+1

Offenbar ist die URL gesperrt, wenn Sie nicht mit Ihrem Entwicklerkonto angemeldet sind. Wenn ich es probiert habe, nachdem ich mich zuerst angemeldet habe, werde ich auf diese Seite weitergeleitet: https://developer.apple.com/unauthorized/ Sie müssen wahrscheinlich herausfinden, wie Sie mit Benutzern umgehen, die nicht signiert sind in ihre Entwickler-Accounts (und, um die Dinge komplizierter zu machen, ich glaube, dass developer.apple.com Sie nach etwa 20 Minuten oder einer Stunde Inaktivität automatisch abmeldet), und es sieht nicht so einfach aus, als einfach zu überprüfen HTTP-Status-/Fehlercodes – fullofsquirrels

Antwort

1

wie die URL Sieht gesperrt, wenn Sie mit Ihrem Entwickler-Konto nicht angemeldet sind ; Wenn ich es ohne Anmeldung versucht habe, werde ich auf diese Seite weitergeleitet: developer.apple.com/unauthorized. Die Inhalte sind, wie Sie vielleicht erwarten, reines HTML, und ich vermute, viele, wenn nicht die meisten, PDF-Parser stürzen ab, wenn Sie ihnen HTML schicken.

Sie müssen wahrscheinlich herausfinden, wie Sie mit Benutzern umgehen, die nicht in ihren Entwicklerkonten angemeldet sind (und, um die Dinge komplizierter zu machen, ich glaube, dass developer.apple.com Sie nach etwa 20 automatisch abmeldet Minuten oder eine Stunde Inaktivität), und es sieht nicht so einfach aus, als einfach HTTP-Status-/Fehlercodes zu prüfen.