简体   繁体   中英

Custom UItableViewCell not loading Image? Swift 4

I'm new at Xcode and swift and ran into this bug. I've searched around a bit and could not find anything on this topic. I have an extension for UIImage that allows me to cache images to the phone here :

import UIKit

let imageCache = NSCache<AnyObject, AnyObject>()

extension UIImageView{

func loadImageUsingCacheWithUrlString(urlString : String)
{
    self.image = nil;
    // check cache for image first

    if let cachedImage = imageCache.object(forKey: urlString as AnyObject)  as? UIImage {
        self.image = cachedImage;
        return
    }

    let url = URL(string: urlString)
    URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in


        //download hit an error
        if error != nil {
            print(error!)
            return
        }
        DispatchQueue.main.async {

            if  let downloadedImage = UIImage(data: data!){
                imageCache.setObject(downloadedImage, forKey: urlString as AnyObject)
                self.image = downloadedImage
            }

        }
    }).resume()
  }
}

It is not loading the image into a table views image view:( Ignore random text )

Table view not loading image

Here is also the UItableView from the main.storyboard:

Updated main.storyboard screen shot

Here is my cellForRowAt: indexPath method where the image is suppose to be loaded:

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "cellid" , for: indexPath) as! CustomChatTableViewCell;
    let gray = UIColor(red:0.94, green:0.94, blue:0.94, alpha:1.0)
    let red = UIColor(red:1.00, green:0.22, blue:0.37, alpha:1.0)

    let message = messages[indexPath.item]

    if message.toId == user?.toId{

    cell.messageBackground.backgroundColor = red
        cell.messageLabel.textColor = UIColor.white
    }
    else{
        cell.messageBackground.backgroundColor = gray
        cell.messageLabel.textColor = UIColor.black
    }

    cell.messageLabel.text = message.text

    if let imageUrl = message.imageUrl{
        print(imageUrl)
        cell.messageImage.loadImageUsingCacheWithUrlString(urlString: imageUrl)

        cell.messageImage.isHidden = false;
        cell.messageLabel.isHidden = true
        //cell.messageBackground.isHidden = true;
    }
    else
    {
        cell.messageImage.isHidden = true;
        cell.messageLabel.isHidden = false
        cell.messageBackground.isHidden = false;
    }

    return cell;
}

Expected Result:

Images load into cells

Observed Result

Images dont load into the cells :( these lines of code :

if let imageUrl = message.imageUrl{
        print(imageUrl)
        cell.messageImage.loadImageUsingCacheWithUrlString(urlString: imageUrl)

Actually print a valid URL string for an image on my firebase database, which is confusing because It is not loading the image.

Important

I use the loadImageUsingCacheWithUrlString method in other parts of my project and it works fine so I don't think its the method.... whats going on?? thank you so much if you can solve this you are an amazing coder!!

I can put an image in the main.storyboard and it works... so I dont know what could be going wrong... :(

screen shot of updated main.storyboard

Image seems to be fine in Extension :

code with breakpoint and console showing

Not sure If the image Is being covered Up in Capture View Hierarchy :

View Hierarchy

In your storyboard, the imageView messageImage is a subview of the view messageBackground . In your if-statement in cellForRow method, you are setting the messageBackground to be hidden

if let imageUrl = message.imageUrl{
    print(imageUrl)
    cell.messageImage.loadImageUsingCacheWithUrlString(urlString: imageUrl)

    cell.messageImage.isHidden = false;
    cell.messageLabel.isHidden = true
    cell.messageBackground.isHidden = true;  //THIS IS THE CULPRIT

}

Since messageBackground is hidden, it's subviews are hidden as well. Might need to rethink your business logic here.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM