2010-05-17 7 views
0

Dans mon application, j'ai besoin de télécharger plusieurs plist.iphone télécharger plusieurs fichiers

pour télécharger un plist-je utiliser le NSURLconnection

dans mon code j'utiliser un UIAlertView avec un UIActivityIndicator puis quand le téléchargement est terminé, j'ajouter un bouton à l'alerte de la rejeter.

Pour télécharger le plist j'utilise quelque part dans mon code un NSURL mis à l'adresse où se trouve le plist, ensuite je fixe un NSURLRequest avec la politique de cache d'URL et un intervalle de délai. Ensuite, j'ai mis mon NSMutableData à la connexion NSURL avec un NSURLRequest. Dans le délégué didReceiveData: j'ajoute des données à mon objet de données mutable, dans l'erreur didFailWithError: je gère. Et finalement dans le connectionDidFinishLoading je sérialise mes données à un plist ainsi je peux écrire pour classer mon plist, et libère mon alertview.

Mon problème est: comment puis-je faire si je fichier sevetal à télécharger parce que le connectionDidFinishLoading est appelé à chaque fois que mon NSURLConnection est terminé, mais je veux libérer mon UiAlert quand tout est fini. Mais quand le premier plist est téléchargé mon code dans le connectionDidFinishLoading tirera.

voici mon code:

dans la vue a fait la charge:

// set the UiAlert in the view did load  
NSURL *theUrl = [NSURL URLWithString:@"http://adress.com/plist/myPlist.plist"]; 
NSURLRequest *theRequest = [NSURLRequest requestWithURL:theUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; 
self.plistConnection = [[ NSURLConnection alloc] initwithRequest:theRequest delegate:self startImmediatly:YES]; 
//plistConnection is a NSURLConnection 
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {  
[incomingPListData appendData:data]; 
} 

-(void)connection:(NSURLConnection *)connectionDidFailWithError:(NSError *)error { 

// handle error here  
} 

-(void)connectionDidFinisloading:(NSURLConnection *) connection {  
NSPropertyListFormat format; 
NSString *serialErrorString;  

NSData *plist = [NSPropertyListSerialisation propertyListFromData:incomingPlistData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&serialErrorString]; 

if (serialErrorString) {//error} 
else { // create path and write plist to path} 
// change message and title of the alert 

donc si je veux todownload un autre fichier où dois-je mettre la demande la connexion et comment puis-je dire didFinishLoading à code de feu quand tout mon fichier est téléchargé.

merci à tous

+0

désolé de ne pas citer le code, mais je suis sur un téléphone intelligent – Floo

Répondre

0

Vous pouvez itérer sur un éventail de ressources que vous souhaitez télécharger, et allouer une demande pour chacun d'eux. Il est possible de définir une étiquette sur une connexion (par exemple l'index de l'URL dans le tableau) que vous pouvez évaluer dans connectionDidFinishLoading. Si vous détenez les informations, quelles sont les requêtes envoyées et celles qui sont terminées, vous pouvez facilement voir si tous les fichiers ont été chargés.

+0

je ne comprends pas mais merci je vais chercher sur le web peut être vous pouvez me donner un exemple désolé mais je suis un débutant – Floo

0

Je pense que non fourni fourni une bonne réponse. Je comprends que vous ne l'obtenez pas (vous le ferez un jour), car je me souviens d'être nouveau à la programmation et autres.

Je fournis donc une autre option, beaucoup plus simple, pour évaluer si tous les téléchargements se sont terminés.

vous suffit d'utiliser un compteur que vous définissez dans votre fichier .h,

int activeDownloads; 

dans votre mise en œuvre (.m) Fichier, où que vous commencez à tous vos téléchargements, mis activeDownloads à zéro avant l'un de vos téléchargements commencent

activeDownloads = 0; 

avant de commencer un téléchargement vous augmentez le nombre de activeDownloads

++activeDownloads; 

si un téléchargement terminé ou vous diminuez la même tombe en panne countervariable

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { --activeDownloads;} 

(je n'ai pas écrit sur la méthode qui est appelée si un téléchargement échoue ...

également chaque fois qu'une connexion se termine ou échoue, vous devez vérifier si celui qui a terminé ou rampé était le dernier. vous faites cela en vérifiant simplement si activeDownloads est égal à zéro. Si c'est le cas, vous pouvez ajouter le bouton "fermer" à votre AlertView. L'inconvénient de cette solution est que vous ne pouvez pas identifier la connexion qui a réussi et celle qui a échoué. (Bien, vous êtes, mais activeDownloads ne vous aident pas à cela)

espoir que je pourrais aider

acclamations

+0

ok merci j'ai compris mais comment puis-je commencer un autre téléchargement ?? parce que si j'ajoute un autre NSURLConnection l'application se bloque. Je ne comprends pas comment ajouter un autre téléchargement – Floo

Questions connexes