J'ai écrit une application iOS qui appelle NSUrlConnection plusieurs fois pour télécharger des données d'image à partir du Web. Parfois, un NSUrlConnection n'a pas fini avant que l'autre commence. Je vois des données jpeg corrompues et je pense que c'est parce que mon délégué didReceiveData enregistre les données de deux NSUrlConnections séparées et fusionne les deux flux de données jpeg ensemble en une seule variable de données, causant ainsi la corruption.Comment puis-je éviter la corruption de données avec plusieurs instances de NSUrlConnection?
Ma question est: quelle est la meilleure façon d'éviter cela? Il ne semble pas y avoir un moyen de sauvegarder chaque instance de NSUrlConnection dans une variable de données séparée, ou de faire attendre chaque instance jusqu'à ce que l'instance précédente soit terminée avant d'enregistrer.
Mon code suit fondamentalement l'exemple d'Apple sauf que j'appelle plusieurs fois une fonction loadData qui crée les commandes NSURLRequest et NSURLConnection. http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html
Merci d'avance pour toute aide.
Merci! Cela ne sera pas aussi simple que de faire une connexion: didReceiveData1 et connexion: méthode didReceiveData2, une pour chaque NSUrlConnection car il pourrait y avoir un nombre quelconque de NSUrlConnections en cours. Comment allez-vous gérer plusieurs instances de NSMutableData? Ai-je besoin de créer un tableau de NSMutableDatas et d'y écrire chaque connexion, ou quelque chose comme ça? – Jackson
Aussi, j'ai trouvé un moyen de garder une trace de ce que NSUrlConnection se termine en utilisant un NSMutableDictionary. À connectionDidFinishLoading je recherche dans un dictionnaire que j'ai fait pour voir quelle connexion a fini et mettre à jour la vue correcte en conséquence. Peut-être que je peux utiliser ce code pour le dictionnaire pour gérer les données aussi bien ...? Des suggestions sur la façon dont je m'y prendrais? – Jackson
Oh, je pense que je l'ai eu. Ce que j'ai fait était de créer un autre NSMutableDictionary pour recievedData NSMutableData * receivedData = [[Données NSMutableData] retain]; \t \t [dataDictionary setObject: receivedData forKey: [la description de la connexion]]; De cette façon, les données reçues ont une connexion correspondante qui peut être identifiée par la clé [description de la connexion]. Ensuite, dans didReceiveData, je dis: NSMutableData * receivedData = [dataDictionary objectForKey: [description de la connexion]]; \t [receivedData appendData: data]; Etc. Cela vous semble-t-il une solution raisonnable? – Jackson