2009-03-21 6 views
0

imageData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: srcAddres]];Pour recevoir une notification après le téléchargement?

Téléchargement jpeg à mon imageData passera un certain temps, par exemple: 2 secondes, donc je veux montrer un indicateur d'activité jusqu'à ce que le téléchargement terminé. Comment puis-je savoir quand le téléchargement est terminé?

Répondre

0

À supposer que ce travail est dans le contrôleur utilise un NSURLConnection comme Graham Lee comme l'a suggéré et auto (le contrôleur) défini comme délégué pour cet objet.

Ensuite, vous déclarez la méthode suivante dans votre contrôleur (see this link for more information):

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

Lorsque la charge est terminée, votre délégué sera appelé. Soit dit en passant, pour montrer l'indicateur d'activité de réseau, vous pouvez utiliser le code comme ceci:

UIApplication* app = [UIApplication sharedApplication]; 
app.networkActivityIndicatorVisible = YES; // to stop it, set this to NO 

Encore une fois, les différents délégués vous aidera ici.

0

Vous avez besoin ce qu'on appelle un « sélecteur ».

Je vous recommande d'utiliser les appels synchrones encore - mais dans un thread séparé. La raison en est que malgré le fait d'être asynchrone, si vous transférez des données dans le thread actuel, vous rencontrerez toujours des problèmes de lenteur de l'interface utilisateur. Si vous utilisez l'indicateur d'activité réseau global, ce n'est pas un problème - mais un indicateur local pour votre application (ou toute autre image redessinée) - semblera être verrouillé.

Par conséquent, créer une classe appelée ImageDownloader (ou somesuch), et placez votre appel de téléchargement synchrone là-bas, pour saisir vos données d'image. Comme l'un des membres de votre classe, déclare (dans l'interface):

SEL successSelector; 

Lorsque vous créez cette classe (que vous voulez passer dans une URL, et récupérer vos données d'image, créez une fonction d'initialisation de la forme suivante (qui prend dans un SEL), et appeler à l'aide:

[ImageDownloader alloc] initWithSelector: @"http://url string" :self : @selector(yourFunction:) 

]

Fondamentalement, vous devez passer un objet, et la méthode dans cet objet, de rappeler quand son fait

La mise en œuvre « initWithSelector » ressemble à:

-(id) initWithSelector: (NSString*)url :(id)adelegate :(SEL) successSeletor { 
    self.url = url; 
    self.delegate = adelegate; 
    self.sel = successSelector; 
} 

(Notez le côlon après « yourFunction » - vous avez besoin de deux points pour chaque paramètre de votre fonction de rappel a.

Ainsi, le sig pour yourFunction ressemble:

-(void) yourFunction: (NSData*)imageData; 

Pour appeler ceci de votre classe ImageDownloader (lorsque le téléchargement est terminé), il suffit d'appeler votre sélection à l'aide:

[delegate performSelector:sel withObject:imageData]; 

Enjoy!

Questions connexes