从URL获取图像Objective C

我试图从URL中获取图片,但似乎没有为我工作。 有人能指出我正确的方向吗?

这是我的代码:

NSURL *url = [NSURL URLWithString:@"http://myurl/mypic.jpg"]; NSString *newIMAGE = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; cell.image = [UIImage imageNamed:newIMAGE]; 

当我debuggingnewIMAGEstring是零,所以有些东西不工作在那里。

你想要的是获取图像数据,然后使用该数据初始化UIImage:

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

按要求,这是一个asynchronous版本:

 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]; }); 

好的,这里有一些错误:

  1. 从URL(url)到NSString(newImage)的转换是不正确的,代码实际做的是尝试将“ http://myurl/mypic.jpg ”的内容加载到NSString中。

  2. -imageNamed方法接受一个string,它是本地文件的path,而不是URL作为参数。

您需要使用NSData对象作为中介,如下例所示: http : //blogs.oreilly.com/digitalmedia/2008/02/creating-an-uiimage-from-a-url.html

接受的答案asynchronous版本在我的代码中工作非常缓慢。 一个使用NSOperation的方法工作起来更快。 由Joe Masilotti提供的代码 – > 目标 – C:从URL加载图像? (并粘贴在下面):

 -(void) someMethod { // set placeholder image UIImage* memberPhoto = [UIImage imageNamed:@"place_holder_image.png"]; // retrieve image for cell in using NSOperation NSURL *url = [NSURL URLWithString:group.photo_link[indexPath.row]]; [self loadImage:url]; } - (void)loadImage:(NSURL *)imageURL { NSOperationQueue *queue = [NSOperationQueue new]; NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(requestRemoteImage:) object:imageURL]; [queue addOperation:operation]; } - (void)requestRemoteImage:(NSURL *)imageURL { NSData *imageData = [[NSData alloc] initWithContentsOfURL:imageURL]; UIImage *image = [[UIImage alloc] initWithData:imageData]; [self performSelectorOnMainThread:@selector(placeImageInUI:) withObject:image waitUntilDone:YES]; } - (void)placeImageInUI:(UIImage *)image { [self.memberPhotoImage setImage:image]; } 

Swift 3和4中

 let theURL = URL(string:"https://exampleURL.com") let imagedData = NSData(contentsOf: theURL!)! let theImage = UIImage(data: imagedData as Data) cell.theImageView.image = theImage 

这将在主线程中完成。

并在asynchronous/后台线程中执行相同的操作

  DispatchQueue.main.async(){ let theURL = URL(string:"https://exampleURL.com") let imagedData = NSData(contentsOf: theURL!)! let theImage = UIImage(data: imagedData as Data) } cell.theImageView.image = theImage