NSURLErrorDomain代码-1002下载pdf

时间:2014-06-08 01:48:30

标签: ios objective-c uiwebview nsurlsession

我试图缓存一个网页,然后我可以使用UIWebView显示该网页。

我在另一个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一样,当我将它们放入浏览器时这些网址有效)

我做错了什么?

2 个答案:

答案 0 :(得分:16)

-1002是NSURLErrorUnsupportedURL / kCFURLErrorUnsupportedURL。将来,您可以搜索Xcode文档中的NSURLErrorDomain或使用快速打开( shift + 命令 + O )来浏览器NSURLErrorDomain定义的标题。这两种技术都会让您发现NSURLErrorDomain中的-1002是NSURLErrorUnsupportedURL

此错误的原因是您的网址包含一些必须转义百分比的字符。并且Web浏览器会经常为您执行必要的百分比转义,这就是它在那里工作的原因。

您可以使用stringByAddingPercentEscapesUsingEncoding将网址转换为可接受的格式:

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部分,了解网址中哪些字符必须被转义百分比的技术说明。

答案 1 :(得分:1)

如果您的urlString包含查询字符串,还可以考虑使用NSURLQueryItem来构建queryString。

它将以可接受的格式创建URL。

以下是如何使用它的示例:Building URLs with NSURLQueryItems and NSURLComponents