2010-09-30 47 views

Répondre

0

Voir ce lien pour la réponse. Il enveloppe nsurlconnection avec asihttp, ce qui rend votre vie beaucoup plus facile.

Does ASIHTTP support multi threads?

+0

Jordan, je ne trouve pas de solution pour cela.Pouvez-vous publier un exemple relatif en utilisant ASIHTTPRequest. Si vous avez trouvé un extrait de code en utilisant NSURLConnection sur ce problème, laissez-moi essayer avec cela, sera plus utile pour mon application. Merci pour toute votre aide. – Ramya

+0

Voici la documentation ASI. Si vous ne pouvez pas suivre la documentation, vous devrez peut-être effectuer une lecture en arrière-plan avant d'essayer NSURLConnection. L'utilisation des files d'attente réseau est épelée en langage clair avec des exemples de code. http://allseeing-i.com/ASIHTTPRequest/How-to-use – Jordan

3

Je me suis occupé plusieurs NSUrlConnections à l'aide d'un NSMutableDictionary qui garde la trace de l'instance de NSMutableData un NSURLConnection particulier doit enregistrer son résultat.

Au début de ma classe je définir:

NSMutableDictionary *dataDictionary; 

Ensuite, dans ma méthode de loadData, j'ai:

 // Create the request 
    NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:currentCam] 
               cachePolicy:NSURLRequestReloadIgnoringLocalCacheData 
              timeoutInterval:30]; 

    // create the connection with the request 
    // and start loading the data 
    NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 
    if (theConnection) { 

     NSMutableData *receivedData = receivedData = [[NSMutableData alloc] init]; 

     //keep track of this connection by adding it to subViewDictionary and dataDictionary with appropriate objects. 
     [dataDictionary setObject:receivedData forKey:[theConnection description]]; 
    } 

    else { 

     NSLog(@"ERROR DOWNLOADING WITH NSURLCONNECTION"); 
    } 

    [theConnection release]; 

J'utilise [description theConnection] comme ma clé et une instance de MSMutableData comme l'objet dans mon dictionnaire, si plus tard je peux rechercher quelle instance va avec une connexion particulière. Si vous ne le faites pas, vous pouvez rencontrer des problèmes de corruption de données (plusieurs connexions peuvent toutes sauvegarder leurs données dans la même variable).

Ensuite, je définir les méthodes déléguées NSURLConnection suivantes:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSMutableData *)data 
{ 
    //look up in dictionary to find out which recievedData instance to use. 
    NSMutableData *theReceivedData = [dataDictionary objectForKey:[connection description]]; 

    // Append the new data to receivedData. 
    [theReceivedData appendData:data]; 
} 


- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
     //Lookup in the dictionary to find the correct instance of recievedData to put image into. 
    NSMutableData *theReceivedData = [dataDictionary objectForKey:[connection description]]; 
    [theReceivedData setLength:0]; 
    [activityIndicator stopAnimating]; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
    // inform the user that there was an error 
    NSLog(@"Connection failed! Error - localizedDescription:%@ NSURLErrorFailingURLStringErrorKey:%@", 
      [error localizedDescription], 
      [[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]); 


    NSMutableData *theReceivedData = [dataDictionary objectForKey:[connection description]]; 
    [theReceivedData release]; 

    //remove keys for this connection since it did not load. 
    [dataDictionary removeObjectForKey:[connection description]]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 

    //look up correct instance of recievedData in teh dictionary for this connection 
    NSMutableData *theReceivedData = [dataDictionary objectForKey:[connection description]]; 

    NSLog(@"Succeeded! Received %d bytes of data",[theReceivedData length]); 

    //---do stuff with data here// 

    [theReceivedData release]; 
} 

Il y a un bon tutoriel sur NSURLConnection here pour une seule connexion. Mon code est basé sur cela avec l'ajout de NSMutableDictionary pour suivre chaque NSUrlConnection et chaque instance de NSMutableData. J'espère que cela a du sens et est utile!

+0

Jackson, Merci pour votre réponse. Je vais essayer avec ça maintenant dans mon application. – Ramya

+0

De rien. J'espère pouvoir aider. – Jackson