Neil Leon
Neil Leon

Reputation: 55

My Images are not loading in the correct order

I have a tableview called (events) where i am pulling images from firebase and loading them, The idea is to post events and add flyer images with the event post. it works perfectly but when i close the app and reopen the images are not in the correct order and some images are on the wrong event. Any help will be greatly appreciated i am very new to coding.

        eventsDatabaseHandle = eventsRef?.child("Church Events").observe(.childAdded, with: { (snaphot) in
            let eventPost = snaphot.value as! [String: Any]
            var event = Event(title: eventPost["eventtitle"] as! String,
                              timestamp: eventPost["eventdate"] as! String,
                              location: eventPost["eventlocation"] as! String,
                              image: nil)

            let task = URLSession.shared.dataTask(with: URL(string: eventPost["ImageUrl"] as! String)!) { data, _, error in

                if let image: UIImage = UIImage(data: data!) {
                    event.image = image
                    DispatchQueue.main.async {
                        self.events.append(event)
                        self.tableView.reloadData()
                    }
                }
            }
            task.resume()

        })


}


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return events.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "events", for: indexPath) as! EventsTableViewCell
        let event = events[indexPath.row]
        cell.flyerImages.image = event.image
        cell.eventTitle.text = event.title
        cell.eventDate.text =  event.timestamp
        cell.eventLocation.text = event.location

Upvotes: 0

Views: 267

Answers (1)

Ali
Ali

Reputation: 505

Edit your Event object to take imageURL instead of UIImage, and try the following after download this lightweight library which handles downloading and caching your images

    eventsDatabaseHandle = eventsRef?.child("Church Events").observe(.childAdded, with: { (snaphot) in
        let eventPost = snaphot.value as! [String: Any]
        var event = Event(title: eventPost["eventtitle"] as! String,
                          timestamp: eventPost["eventdate"] as! String,
                          location: eventPost["eventlocation"] as! String,
                          imageURL: eventPost["ImageUrl"])

         self.events.append(event)
    })

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "events", for: indexPath) as! EventsTableViewCell
    let event = events[indexPath.row]

    if let imgURL = URL(string:event.imageURL)
    {
        cell.flyerImages.kf.setImage(with:imgURL)
    }
    cell.eventTitle.text = event.title
    cell.eventDate.text =  event.timestamp
    cell.eventLocation.text = event.location
}

Upvotes: 1

Related Questions