2014-06-08 101 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中的字符必须是百分比转义的技术说明。