51 votes

Obtenir une image à partir d'URL Objective C

J'essaie d'obtenir une image à partir d'une URL et elle ne semble pas fonctionner pour moi. Quelqu'un peut me diriger dans la bonne direction?

Voici mon code:

 NSURL *url = [NSURL URLWithString:@"http://myurl/mypic.jpg"];

NSString *newIMAGE = [[NSString alloc] initWithContentsOfURL:url
                                       encoding:NSUTF8StringEncoding error:nil];

cell.image = [UIImage imageNamed:newIMAGE];
 

Lorsque je débogue la nouvelle chaîne IMAGE est nulle, quelque chose ne fonctionne pas là.

165voto

Jim Dovey Points 8384

Ce que vous voulez, c'est obtenir les données de l'image, puis initialiser un UIImage en utilisant ces données:

 NSData * imageData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: @"http://myurl/mypic.jpg"]];
cell.image = [UIImage imageWithData: imageData];
[imageData release];
 

Comme demandé, voici une version asynchrone:

 dispatch_async(dispatch_get_global_queue(0,0), ^{
    NSData * data = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: @"http://myurl/mypic.jpg"]];
    if ( data == nil )
        return;
    dispatch_async(dispatch_get_main_queue(), ^{
        // WARNING: is the cell still using the same data by this point??
        cell.image = [UIImage imageWithData: data];
    });
    [data release];
});
 

4voto

Justicle Points 6439

Ok, il y a quelques choses de mal ici:

  1. La conversion à partir de l'URL (url) de NSString (newImage) est incorrect, ce que le code fait n'est d'essayer de charger le contenu de "http://myurl/mypic.jpg" dans le NSString.

  2. L'-imageNamed méthode prend une chaîne de caractères qui est un chemin d'accès d'un fichier local, pas une URL comme argument.

Vous devez utiliser un NSData objet comme un intermédiaire, comme dans cet exemple: http://blogs.oreilly.com/digitalmedia/2008/02/creating-an-uiimage-from-a-url.html

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