2014-06-08 20 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.)"}

가이이었다 내가보고, 내가 URL이 유효한지 확인했습니다

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

를 호출하고있는 무슨의 조각이다 : 나는 실행하면,이 오류가 계속 같은 오류가 발생하는 다른 사람들의 원인 (내 URL은 브라우저에 넣을 때 유효한 https://mistar.oakland.k12.mi.us/novi/StudentPortal/Home/PrintProgressReport/20152193^HS4과 같습니다.)

내가 뭘 잘못하고 있니?

+0

뭐라 구요? 충돌. – AndrewSB

답변

16

-1002는 NSURLErrorUnsupportedURL/kCFURLErrorUnsupportedURL입니다. 앞으로, 당신은 브라우저 ( + 명령 + O변화) NSURLErrorDomain의 정의에 대한 헤더 NSURLErrorDomain의 엑스 코드 문서를 검색하거나 빠른 개방 사용할 수 있습니다. 어느 기술을 사용하면 NSURLErrorDomain에서 -1002가 NSURLErrorUnsupportedURL이라는 것을 알게 될 것입니다.

이 오류의 원인은 URL에 이스케이프 처리해야하는 문자가 포함되어 있기 때문입니다. 그리고 웹 브라우저는 종종 당신을 위해 필요한 퍼센트 탈출을 할 것입니다. 이것이 거기에서 작동하는 이유입니다.

당신은 허용 형식으로 URL을 변환 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) { 
    ... 
}]; 

을 그건 그렇고, Charles 매우 유용합니다. 브라우저에서 요청을 실행하고 앱에서 다시 요청하여 Charles의 결과를 비교합니다. 이것들을 비교해 본다면, URL을 백분율로 이스케이프해야한다는 것을 알았을 것입니다.

RFC 3986의 2 절에서 URL의 어떤 문자를 이스케이프 처리해야하는지에 대한 기술적 인 설명을 참조 할 수도 있습니다.