2014-06-08 102 views
6

我試圖緩存一個網頁,然後我可以使用UIWebView後來顯示。NSURLErrorDomain代碼-1002下載pdf

我有相關NSURLSessionDataTask內的for循環(試圖緩存6個網頁)在另一個NSURLSessionDataTask完成塊內。當我跑,我不斷收到此錯誤:

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

這裏是我打電話

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

我已確認該網址是有效的,看到的是一個片段導致其他人得到相同的錯誤(我的網址是https://mistar.oakland.k12.mi.us/novi/StudentPortal/Home/PrintProgressReport/20152193^HS4,當我把它們放入瀏覽器時有效)

我在做什麼錯?

+0

什麼?磕碰。 – AndrewSB

回答

16

-1002是NSURLErrorUnsupportedURL/kCFURLErrorUnsupportedURL。在未來,你可以搜索Xcode的文檔NSURLErrorDomain或使用快開(轉變 + 命令 + Ø)到瀏覽器的標題爲NSURLErrorDomain定義。無論哪種技術都會導致您發現NSURLErrorDomain中的-1002爲NSURLErrorUnsupportedURL

此錯誤的原因是您的網址包含一些必須百分比轉義的字符。網頁瀏覽器會經常爲你做必要的百分比轉義,這就是爲什麼它在那裏工作。

您可以使用stringByAddingPercentEscapesUsingEncoding的URL轉換爲可接受的格式:

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

順便說一句,對應用程序協調Web瀏覽器結果時,Charles是非常有用的。從瀏覽器運行請求,然後再從應用中運行,並在Charles中比較結果。如果你比較了這些,你會看到你需要轉義URL的百分比。

順便說一下,您還可以參考RFC 3986的第2部分,瞭解URL中的字符必須是百分比轉義的技術說明。