2014-06-08 10 views
6

Ich versuche, eine Webseite zu cachen, die ich später mit einem UIWebView zeigen kann.NSURLErrorDomain Code -1002 herunterladen pdf

Ich habe die relevanten NSURLSessionDataTask innerhalb einer for-Schleife (versuchen, 6 Webseiten zwischenzuspeichern) innerhalb der Completion-Block eines anderen NSURLSessionDataTask. Wenn ich laufe, halte ich diesen Fehler:

Ayy there was error downloading, data:<> response:(null) error:Error Domain=NSURLErrorDomain Code=-1002 "The operation couldn’t be completed. (NSURLErrorDomain error -1002.)" UserInfo=0xdd89d30 {NSUnderlyingError=0xdd89ba0 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1002.)"}

Hier ist ein Ausschnitt von dem, was ich rufe

for (MAClass *class in [myDictResult objectForKey:@"classes"]) { 
    NSString *PRURL = [[[class assignments] objectAtIndex:[[class assignments] count]-1] assignmentName]; 
    NSLog(@"PRURL is %@", PRURL); 

    NSURLSessionDataTask *progressReportTask = [defaultSession dataTaskWithURL:[NSURL URLWithString:PRURL] completionHandler:^(NSData *progressReportData, NSURLResponse *progressReportResponse, NSError *progressReportError) { 
     if ([progressReportData length] > 0 && progressReportError == nil) { 
       NSLog(@"got dat data"); 
     } else NSLog(@"Error with getting data data:%@\nresponse:%@\nerror:%@", progressReportData, progressReportResponse, progressReportError); 
     }]; 
     [progressReportTask resume]; 
     NSLog(@"After request"); 
} 

Ich habe dafür gesorgt, dass die URL gültig ist, zu sehen, dass die war Ursache für andere Leute mit dem gleichen Fehler (meine URLs sind wie https://mistar.oakland.k12.mi.us/novi/StudentPortal/Home/PrintProgressReport/20152193^HS4, die gültig sind, wenn ich sie in einen Browser legte)

Was mache ich falsch?

+0

Alles? STOSSEN. – AndrewSB

Antwort

16

-1002 ist NSURLErrorUnsupportedURL/kCFURLErrorUnsupportedURL. In Zukunft können Sie entweder suchen die Xcode-Dokumentation NSURLErrorDomain oder schnell öffnen verwenden (Verschiebung + Befehl + O) zum Browser der Header für die Definition von NSURLErrorDomain. Beide Techniken hätten Sie zu der Entdeckung geführt, dass -1002 in NSURLErrorDomainNSURLErrorUnsupportedURL ist.

Der Grund für diesen Fehler ist, dass Ihre URL einige Zeichen enthält, die prozentual maskiert sein müssen. Und Web-Browser werden häufig die notwendigen Prozent-Entkommen für Sie tun, weshalb es dort funktioniert.

Sie stringByAddingPercentEscapesUsingEncoding können Sie die URL auf ein akzeptables Format konvertieren:

NSString *urlString = @"https://mistar.oakland.k12.mi.us/novi/StudentPortal/Home/PrintProgressReport/20152193^HS4"; 
NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 

NSURLSessionTask *task = [defaultSession dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
    ... 
}]; 

By the way, wenn sie gegen die App Web-Browser Ergebnisse in Einklang zu bringen, ist Charles sehr nützlich. Führen Sie die Anfrage aus dem Browser und erneut aus der App und vergleichen Sie die Ergebnisse in Charles. Wenn Sie diese verglichen hätten, hätten Sie gesehen, dass Sie die URL prozentual umgehen müssen.

Übrigens können Sie auch in Abschnitt 2 von RFC 3986 nach einer technischen Beschreibung der Zeichen in URLs suchen, die prozentual maskiert sein müssen.

Verwandte Themen