2014-06-08 16 views
6

Próbuję buforować stronę internetową, którą później mogę wyświetlić za pomocą interfejsu UIWebView.NSURLErrorDomain Code -1002 pobieranie pdf

Mam odpowiednie NSURLSessionDataTask wewnątrz pętli for (próbując buforować 6 stron internetowych) wewnątrz bloku zakończenia innego NSURLSessionDataTask. Kiedy biegnę, wciąż otrzymuję ten błąd:

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.)"}

Oto urywek co dzwonię

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"); 
} 

Zrobiłem pewien, że adres URL jest poprawny, widząc, że był dla innych osób z tym samym błędem (moje adresy URL są takie jak https://mistar.oakland.k12.mi.us/novi/StudentPortal/Home/PrintProgressReport/20152193^HS4, które są ważne, gdy umieściłem je w przeglądarce)

Co robię źle?

+0

Coś? GUZ. – AndrewSB

Odpowiedz

16

-1002 to NSURLErrorUnsupportedURL/kCFURLErrorUnsupportedURL. W przyszłości, można szukać w dokumentacji Xcode dla NSURLErrorDomain lub użyj szybkie otwarte (przesunięcie + komenda + O) do przeglądarki nagłówki dla definicji NSURLErrorDomain. Każda technika doprowadziłaby do odkrycia, że ​​-1002 w NSURLErrorDomain jest NSURLErrorUnsupportedURL.

Powodem tego błędu jest to, że URL zawiera kilka znaków, które muszą być procentowe. A przeglądarki internetowe często wykonują dla Ciebie niezbędny procentowy ucieczek, dlatego właśnie tam działa.

Można użyć stringByAddingPercentEscapesUsingEncoding przekonwertować URL do akceptowalnego formacie:

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) { 
    ... 
}]; 

Nawiasem mówiąc, kiedy pogodzenia wyników przeglądarki internetowej przed aplikacją, Charles jest bardzo przydatna. Uruchom żądanie z przeglądarki i ponownie z aplikacji i porównaj wyniki w Charles. Gdybyś to porównał, zobaczyłbyś, że musisz uciec procentowi od adresu URL.

Przy okazji, można również zapoznać się z rozdziałem 2 z RFC 3986, aby uzyskać opis techniczny, który znaki w adresach URL muszą być procentowe.

Powiązane problemy