我试图缓存一个网页,然后我可以使用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
一样,当我将它们放入浏览器时这些网址有效)
我做错了什么?
答案 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。