2014-06-08 16 views
6

Tôi đang cố gắng lưu vào bộ nhớ cache một trang web mà sau đó tôi có thể hiển thị bằng cách sử dụng UIWebView.NSURLErrorDomain Code -1002 tải xuống pdf

Tôi có NSURLSessionDataTask có liên quan bên trong vòng lặp for (cố gắng cache 6 trang web) bên trong khối hoàn thành của một số khác NSURLSessionDataTask. Khi tôi chạy, tôi tiếp tục nhận được lỗi này:

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

Dưới đây là một đoạn của những gì tôi đang kêu gọi

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

Tôi đã thực hiện chắc chắn rằng URL là hợp lệ, nhìn thấy đó là gây ra cho những người khác nhận được cùng một lỗi (url của tôi giống như https://mistar.oakland.k12.mi.us/novi/StudentPortal/Home/PrintProgressReport/20152193^HS4, có giá trị khi tôi đặt chúng vào trình duyệt)

Tôi đang làm gì sai?

+0

Mọi thứ? BĂNG. – AndrewSB

Trả lời

16

-1002 là NSURLErrorUnsupportedURL/kCFURLErrorUnsupportedURL. Trong tương lai, bạn có thể tìm kiếm tài liệu Xcode cho NSURLErrorDomain hoặc sử dụng nhanh chóng mở (thay đổi + lệnh + O) để trình duyệt các tiêu đề cho định nghĩa của NSURLErrorDomain. Hoặc là kỹ thuật sẽ dẫn bạn đến khám phá rằng -1002 trong NSURLErrorDomainNSURLErrorUnsupportedURL.

Lý do cho lỗi này là URL của bạn chứa một số ký tự phải được thoát khỏi phần trăm. Và các trình duyệt web sẽ thường xuyên thực hiện thoát phần trăm cần thiết cho bạn, đó là lý do tại sao nó hoạt động ở đó.

Bạn có thể sử dụng stringByAddingPercentEscapesUsingEncoding để chuyển đổi URL sang một định dạng có thể chấp nhận:

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

Bằng cách này, khi chỉ tương thích kết quả trình duyệt web với ứng dụng, Charles là rất hữu ích. Chạy yêu cầu từ trình duyệt và một lần nữa từ ứng dụng và so sánh kết quả trong Charles. Nếu bạn đã so sánh chúng, bạn sẽ thấy rằng bạn cần phần trăm thoát khỏi URL.

Nhân tiện, bạn cũng có thể tham khảo phần 2 của RFC 3986 để biết mô tả kỹ thuật về các ký tự nào trong URL phải được loại trừ phần trăm.

Các vấn đề liên quan