2014-06-08 5 views
6

Sto tentando di memorizzare nella cache una pagina Web che posso poi mostrare utilizzando UIWebView.NSURLErrorDomain Code -1002 download pdf

Ho il relativo NSURLSessionDataTask all'interno di un ciclo for (tentando di memorizzare nella cache 6 pagine Web) all'interno del blocco di completamento di un altro NSURLSessionDataTask. Quando eseguo, continuo a ricevere questo errore:

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

Ecco un frammento di quello che sto chiamando

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

ho fatto in modo che l'URL è valido, visto che era il perché altre persone ottengono lo stesso errore (i miei url sono come https://mistar.oakland.k12.mi.us/novi/StudentPortal/Home/PrintProgressReport/20152193^HS4, che sono validi quando li metto in un browser)

Cosa sto facendo male?

+0

Qualcosa? BUMP. – AndrewSB

risposta

16

-1002 è NSURLErrorUnsupportedURL/kCFURLErrorUnsupportedURL. In futuro, è possibile cercare la documentazione Xcode per NSURLErrorDomain o utilizzare rapido aperta (spostamento + comando + O) al browser le intestazioni per la definizione di NSURLErrorDomain. Entrambe le tecniche ti avrebbero portato a scoprire che -1002 in è NSURLErrorUnsupportedURL.

Il motivo di questo errore è che il tuo URL contiene alcuni caratteri che devono essere in percentuale di escape. E i browser Web eseguiranno spesso la percentuale di escape necessaria per te, motivo per cui funziona lì.

È possibile utilizzare stringByAddingPercentEscapesUsingEncoding per convertire l'URL di un formato accettabile:

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

A proposito, quando conciliare i risultati del browser web contro l'applicazione, Charles è molto utile. Esegui la richiesta dal browser e nuovamente dall'app e confronta i risultati in Charles. Se li avessi confrontati, avresti visto che dovevi sfogare la percentuale dell'URL.

A proposito, è anche possibile fare riferimento alla sezione 2 di RFC 3986 per una descrizione tecnica di quali caratteri negli URL devono essere in percentuale di escape.