52 votes

Comment résoudre l'erreur de domaine NSURLErrorDomain -999 dans iPhone 3.0 OS

Je essaie de mettre à jour mon application iPhone pour fonctionner avec OS 3.0. J'ai une UIWebView qui affiche une page correctement. Mais quand je clique sur un lien, cela appelle mon délégué pour didFailLoadWithError et l'erreur est L'opération n'a pas pu être terminée. (erreur NSURLErrorDomain -999.) J'ai vérifié que cela fonctionnait encore avec OS 2.2.1, donc c'est quelque chose qui a changé dans 3.0.

Des idées?

0 votes

Les détails tels que la page affichée dans l'UIWebView (si elle est publique) et la façon dont vous avez configuré cette vue et son délégué dans le code pourraient être utiles.

0 votes

Je suis sur la route maintenant et ajouterai plus de détails une fois de retour. Il s'agit d'une page web publique. En creusant davantage, il semble que cela puisse être lié à une page qui n'est pas entièrement chargée avant que la demande suivante ne soit reçue. Je n'ai pas encore eu l'occasion de tester cela. Si cela s'avère être le problème, je mettrai à jour.

0 votes

Je pense que vous avez besoin de revoir ce qui est considéré comme la réponse correcte

120voto

dp. Points 1061

J'ai pu trouver la réponse ici.

Ce fil de discussion contenait cette description pour cette erreur : Cette erreur peut survenir si une autre requête est effectuée avant que la requête précédente de WebView ne soit terminée...

J'ai contourné ce problème en ignorant cette erreur et en laissant le webview continuer à charger.

if ([error code] != NSURLErrorCancelled) {
//afficher une alerte d'erreur, etc.
}

27 votes

Mieux vaut utiliser la constante NSURLErrorCancelled au lieu de la valeur littérale -999.

3 votes

Cette erreur peut également être un code smell. Je m'en suis débarrassé non pas en l'ignorant, mais en déplaçant un appel de méthode déclencheur de chargement de viewDidAppear (qui pourrait être déclenché plusieurs fois lors du chargement de la vue web) dans viewDidLoad.

1 votes

Mieux encore, l'uiwebview a une propriété booléenne "loading" que vous devriez vérifier, puis arrêter explicitement l'opération de chargement. Cependant, dans mon cas, cela semble être le résultat de la désallocation de la webview.

29voto

BadPirate Points 11614

NSURLErrorCancelled (-999)

"Renvoyé lorsqu'un chargement asynchrone est annulé. Un délégué du cadre Web Kit recevra cette erreur lorsqu'il effectue une opération d'annulation sur une ressource en cours de chargement. Notez qu'un délégué de NSURLConnection ou NSURLDownload ne recevra pas cette erreur si le téléchargement est annulé."

Pour ma situation (et probablement la vôtre), cela peut être ignoré:

if([error code] == NSURLErrorCancelled) return; // Ignorer cette erreur

11voto

7php Points 375

Les DEUX réponses ci-dessus étaient CORRECTES> Il suffit de renvoyer si la demande de chargement est annulée.

Aussi, je tiens à souligner que, les gens n'oublient PAS de mettre un NSLog à l'intérieur de votre méthode didFailLoadWithError, cela peut éviter de perdre beaucoup de temps en repérant le problème tout de suite!

Voici la solution finale avec tout ce que j'ai mentionné ci-dessus:

-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    NSLog(@"ERREUR : %@",error); // Être informé de l'erreur EN PREMIER
    if([error code] == NSURLErrorCancelled) 
        return;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X