Search code examples
swiftuitableviewuiimageviewseguedetailview

Show Image from URL in detailView after selection in tableView


I have a tableView which display a list of traffic-cameras parsed from a XML file. When I select a cell, it sends the ImageURL, Roadname, Coordinates etc. via the prepareForSegue method.

In my detailviewcontroller I declare the incoming values as the following:

var selectedFeedURL = String()
var selectedFeedRoadname = String()
var selectedFeedLongitude = String()
var selectedFeedLatitude = String()

I have no problem printing all the values into the log or set it as labels. The problem occurs when I try to load the selectedFeedURL (which is the URL to the image, i.e: http://webkamera.vegvesen.no/kamera?id=559847) and set it to my imageView..

In my viewDidLoad, I have the following code, which should download the image and set it to my imageView named cameraImageView.

if let url = NSURL(string:"\(selectedFeedURL)") {
    if let data = NSData(contentsOfURL: url){
        print("Suksess")
        cameraImageView.image = UIImage(data: data)
    }   
}

My imageView stays empty and I doesn't get any errors or complains in the debug area. If I print out the selectedFeedURL, the link is there.

The weird part is that if I change

NSURL(string:"\(selectedFeedURL)")

to

NSURL(string:"http://webkamera.vegvesen.no/kamera?id=559847")

Basically changing the variable to a camera URL, it works perfectly.

Soo... any suggestions on what the problem might be?

Much appreciated :)


Solution

  • If there are white spaces and newline characters at the start and end of your URL string, it won't work.

    Try:

    selectedFeedURL = selectedFeedURL.stringByTrimmingCharactersInSet(.whitespaceAndNewlineCharacterSet())
    
    if let url = NSURL(string: selectedFeedURL) {
        if let data = NSData(contentsOfURL: url){
            print("Suksess")
            cameraImageView.image = UIImage(data: data)
        }
    }