Getting Image from URL Objective C

前端 未结 5 1779
甜味超标
甜味超标 2020-12-04 08:13

I\'m trying to get an image from an URL and it doesn\'t seem to be working for me. Can someone point me in the right direction?

Here is my code:

NSUR         


        
相关标签:
5条回答
  • 2020-12-04 08:17

    the accepted answer asynchronous version worked very slow in my code. an approach using NSOperation worked light years faster. the code provided by Joe Masilotti --> objective - C : Loading image from URL? (and pasted below):

    -(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];
    }
    
    0 讨论(0)
  • 2020-12-04 08:22

    What you want is to get the image data, then initialize a UIImage using that data:

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

    As requested, here's an asynchronous version:

    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];
    });
    
    0 讨论(0)
  • 2020-12-04 08:31

    Updating upon Jim dovey answer,[data release] is no longer required because in the updated apple guidelines. Memory management is done automatically by ARC (Automatic counting reference) ,

    Here is the updated asynchronous call,

    dispatch_async(dispatch_get_global_queue(0,0), ^{
            NSData * data = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: @"your_URL"]];
            if ( data == nil )
                return;
            dispatch_async(dispatch_get_main_queue(), ^{
                self.your_UIimage.image = [UIImage imageWithData: data];
            });
    
        });
    
    0 讨论(0)
  • 2020-12-04 08:37

    In Swift 3 and 4

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

    This will be done in the main thread.

    And to perform the same in asynchronous/background thread

       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
    
    0 讨论(0)
  • 2020-12-04 08:42

    Ok there's a couple of things wrong here:

    1. The conversion from URL (url) to NSString (newImage) is incorrect, what the code actually does there is try to load the contents of "http://myurl/mypic.jpg" into the NSString.

    2. The -imageNamed method takes a string that is a path of a local file, not a URL as an argument.

    You need to use an NSData object as an intermediary, like in this example: http://blogs.oreilly.com/digitalmedia/2008/02/creating-an-uiimage-from-a-url.html

    0 讨论(0)
提交回复
热议问题