2011-07-04 3 views
1

je tente de retrive données de certaines URL avec la commande:échec NSURLConnection - 1003

-(NSMutableData *) callUrl: (NSString *)url withData:(NSMutableDictionary *)data delegate:(id) delegate { 

    NSURL *executeUrl = [NSURL URLWithString:<string>]; 
    NSURLRequest *request = [NSURLRequest requestWithURL: executeUrl 
          cachePolicy:NSURLRequestReloadIgnoringLocalCacheData 
          timeoutInterval:60]; 

    NSMutableData *receivedData = nil; 

    NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:request delegate:delegate]; 
    if (theConnection) { 
     receivedData = [[NSMutableData data] retain]; 
    } else { 
     @throw @"Connection error"; 
    } 

    return receivedData; 
} 

En délégué (à la fois après connectionDidFinish et connectionDidFailWithError) je fais:

//some uninvasive alerts 
// release the connection, and the data object 
[connection release]; 
[receivedData release]; 

problème est quand je fournis mauvais url j'ai eu une erreur correcte - c'est une bonne partie - mais ensuite je veux exécuter la deuxième url - bien sûr, j'ai 1003 erreur - NSURLErrorCannotFindHost.

Après environ 1-2 minutes, j'appelle l'URL avec succès et j'obtiens des données. Je suspecte certains délais d'attente et ports d'affaires, mais changer le délai d'attente dans NSURLRequest ne change rien.

MISE À JOUR

En fin de compte - Administrateurs a eu quelques problèmes avec le serveur DNS atteint via le réseau WiFi. Le code est bon. Merci pour la réponse. Si certains ont des problèmes similaires: essayez l'adresse IP au lieu du nom d'hôte.

+0

Comment avez-vous résolu le problème? Avez-vous essayé avec l'adresse IP? Je suis également confronté à ce même problème. Veuillez suggérer. –

Répondre

0

avant d'effectuer un nouvel appel de connexion, annulez la connexion précédente. utilisant

[self.connection cancel]; 
+0

J'ai essayé d'annuler la connexion avant de la relâcher. Ne prend aucun effet. – vitotao

1

De la documentation développeur Apple iOS, 1003 erreur fait référence au moment où le nom d'hôte pour une URL ne peut pas être résolu. Pour éviter les défaillances DNS en wifi, les scénarios DNS surchargés, il est préférable de résoudre ip depuis hostname pour une utilisation ultérieure ou de coder en dur l'adresse ip directement, si vous n'avez pas l'intention de décaler l'hébergement plus tard.

documentation Apple:

URL Loading System Error Codes 

Ces valeurs sont retournées comme le code d'erreur propriété d'un objet NSError avec le domaine « NSURLErrorDomain ».

enum 
{ 
    NSURLErrorBadURL = -1000, 
    NSURLErrorTimedOut = -1001, 
    NSURLErrorUnsupportedURL = -1002, 
    NSURLErrorCannotFindHost = -1003,//**** 
    NSURLErrorCannotConnectToHost = -1004, 
    NSURLErrorDataLengthExceedsMaximum = -1103, 
    NSURLErrorNetworkConnectionLost = -1005, 
    NSURLErrorDNSLookupFailed = -1006, 
    ... 
    } 

1003 NSURLErrorCannotFindHost 
Returned when the host name for a URL cannot be resolved. 
Available in iOS 2.0 and later. 
Declared in NSURLError.h. 
1

j'ai fait 2 choses pour résoudre ce problème:

  1. J'ai utilisé ce avant de commencer mon NSURLConnection

    [NSURLConnection cancelPreviousPerformRequestsWithTarget:self];

  2. J'ai changé mon DNS 8.8.8.8 dans les paramètres wifi qui est le serveur DNS public de google. Je ne sais pas lequel a été corrigé mais le problème a été résolu.