i m en utilisant sendsynchronousrequest pour obtenir les données du serveur. Je sais que synchrones attendra que les données reçues pour cette demande. p>
Mais le problème vient lorsque l'utilisateur par erreur entre une URL non existante et que tente d'obtenir une réponse. Dans ce cas, si l'utilisateur passe en arrière-plan et que le premier plan ne montre que l'écran noir. Il ne montre que la barre d'état. Aussi, il ne montre aucune application de base. Je dois appuyer sur le bouton de la maison pour sortir de ma demande. P>
sur Simulator, après 1+ minute, cela me montre le message qui "Demande de temps" (pas de crash). P>
sur le périphérique, dans un délai de 1 min. Application Obtenez des crashs. P>
Toute suggestion. De l'aide. C'est vraiment un problème sérieux dans mon application. P>
Merci. P>
9 Réponses :
Utilisez la classe ASIHTTTPEQUEST au lieu de NsurlConnection, ce n'est que Wrapper autour de NsurlConnection et a des rappels très simples, vous pouvez également régler le temps de remplir une demande. Veuillez passer à travers ce lien pour plus d'infos http://allseeing-i.com/adihttprectes/ p>
NsurlConnection fonctionne correctement pour moi, ce n'est que dans la case ci-dessus sa collision.
ASIHTTPEQUEST n'utilise pas du tout NSurLConnection. Aussi ASIHTTPEQUEST n'est plus en développement actif.
Je pense que l'application se bloque parce que vous n'obtenez aucune donnée lorsque vous n'obtenez aucune donnée lorsque l'utilisateur entrait mal code> URL code> et que vous utilisez ce "code renvoyé" Je pense que cela corrigera votre problème p> nil code>
nsdata code > faire des trucs.
Je pense que vous devez d'abord tester les données de l'utilisateur s'il est correct ou non et que celui-ci est correct, envoie la demande autrement invite l'utilisateur qui "Veuillez saisir les données correctes" ... P>
ou p>
Lorsque votre analyse des données en réponse a échoué. Vous pouvez également faire une méthode de déléguée de protocole, c'est-à-dire finiwithwithError afin que vous proposiez votre dernière assurance-emploi. P>
Essayez celui-ci:
#import "ASIHTTPRequest.h" //In a method [self performSelectorInBackground:@selector(DownLoadImageInBackground:) withObject:imgUrlArr]; -(void) DownLoadImageInBackground:(NSArray *)imgUrlArr1 { NSURL * url = [Image URL]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request setDelegate:self]; [request startAsynchronous]; } -(void)requestFailed:(ASIHTTPRequest *)request { NSLog(@"URL Fail : %@",request.url); NSError *error = [request error]; // you can give here alert too.. } -(void)requestFinished:(ASIHTTPRequest *)request { NSData *responseData = [request responseData]; UIImage *imgInBackground = [[UIImage alloc] initWithData:responseData]; [imageView setImage: imgInBackground]; }
Vous pouvez vérifier l'accessibilité de l'URL avant de commencer la demande.
Apple a accessibilité code> méthodes pour le faire. Mais il est plus facile d'utiliser une enveloppe. Par exemple.
ASIRACEABILITÉ CODE>. P>
Vous devez jeter un oeil à cet article: https: // développeur.apple.com/library/ios/#qa/qa1693/_index.html p>
iOS contient un chien de garde Donc, si vous voulez télécharger quelque chose, ne le téléchargez pas sur le fil principal. P>
Je ne suis pas sûr, mais il ne mentionne pas le téléchargement. La connexion synchrone sur le thread principal peut avoir un sens pour un login peut-être
Je ne pense pas qu'il est logique d'utiliser une connexion synchrone sur le fil principal pour l'action de connexion. Il devrait être préférable de lancer l'asynchronisme, d'afficher un indicateur d'activité et de désactiver l'interaction utilisateur. Je vous suggère de créer une classe de connexion contenant une méthode avec un bloc de gestionnaire d'achèvement. (Si vous voulez un exemple, vous pouvez voir la classe Twrequest disponible dans iOS 5)
Tout comme Julien dit, le chien de garde tue votre application. Pour répondre à quelques questions: P>
J'espère que tout était tout. Faites-moi savoir si j'ai raté quelque chose. P>
Pourquoi ne pas définir un délai d'attente pour votre connexion?
NSString *urlString = TEST_CONNECTION; NSError *error = nil; NSHTTPURLResponse *response = nil; NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:5.0]; NSData *conn = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
relate fort>
Obtenez-vous quelque chose dans la console avant de vous battre.