4 votes

Téléchargement de fichiers multiples à sécurité intégrée pour iPhone

Mon application télécharge des paquets d'images à partir d'un serveur. Il s'agit d'un ensemble de liens directs (20-50 fichiers) à partir de XML.

  • Comment puis-je m'assurer que l'ensemble des images est entièrement téléchargé ?

  • Comment ajouter une condition pour annuler tout le téléchargement (et supprimer tous les fichiers déjà téléchargés) si l'application a été fermée avec le bouton iPhone ? (ces méthodes sont dans AppDelegate alors que tout mon code de téléchargement est dans downloadviewcontroller.m).

  • Y a-t-il autre chose dont je dois me préoccuper lors du téléchargement de plusieurs fichiers (5-10 MB au total) ?

Le code que j'utilise actuellement n'est pas très sûr en cas d'interruption du téléchargement ou de fermeture de l'application. Dans le fil de fond, j'appelle cette méthode pour chaque fichier :

    (BOOL) loadImageFromURL:(NSString *)url withName:(NSString *)filename toFolder:(NSString *)folder {

        NSURL *link = [NSURL URLWithString:url];
        NSFileManager *manager = [NSFileManager defaultManager];    
        NSString *filepath = [folder stringByAppendingPathComponent:filename];

        if ([manager fileExistsAtPath:filepath]) {
            return YES;
        }
        else
        { 
            UIImage *image = [[UIImage imageWithData:[NSData dataWithContentsOfURL:link]] retain];
            NSData *data = [NSData dataWithData:UIImageJPEGRepresentation(image, 1.0f)];
            if ([data length] <= 0) 
                [image release];
                return NO; // no data
            else 
            {
                [data writeToFile:filepath atomically:YES];
                [image release];            
                return YES;
            }
        }
    }

2voto

GameLoading Points 3337

Utilisez nsoperation pour le faire

vérifier le coup lien ..

http://www.cimgf.com/2008/02/16/cocoa-tutorial-nsoperation-and-nsoperationqueue/

maintenant en août 2012, essayez de chercher la vidéo wwdc 2012 no 211 pour apprendre nsoperation. Vous pouvez utiliser le bloc pour le faire.

[aNsque addExecutionBlock:^{ ...code... }];

où aNsque est nsblockoperation.

2voto

Robert Points 10822

N'utilisez pas l'appel synchrone dataWithContentsOfURL . Regardez plutôt comment utiliser la méthode asynchrone de NSURLConnection, - initWithRequest:délégué :

Vous pouvez ensuite annuler la demande avec [connection cancel]; De plus, vous n'aurez pas à l'exécuter sur un autre thread car il est déjà asynchrone.

Pour ce qui est de l'exécution de plusieurs requêtes, vous avez probablement plusieurs options. Une idée serait de créer un objet qui lance la connexion NSURLConnection et analyse la réponse, puis de créer un tableau de ces objets.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X