title: UITableView reload after navigation controller back not showing value changes
body: <p>I have a table view where I am getting data from Firebase. The table is in a view controller that is part of a navigation controller. When coming to the view from it's parent view, the table data always displays correctly. When I go to the detail view when I click a row and come back, the changes I have made to my data are not showing even though the data values are the new values. 
  I am loading the table in viewWillAppear so that I can reload the data when coming back from the detail view controller. I am using DispatchQueue.main.async since the UI code is in a completion handler from the Firebase Call. I can set breakpoints and see that the data is being updated from FB and the table is reloading all the rows.
  The specific issue I am having is an image, which is hidden by default, should no longer be hidden based on a data value from FB. I can step in the debugger and see that the data says not to hide the image, the image.isHidden = false is called, yet the image doesn't appear. All of my UI calls are wrapped in DispatchQueue.main.async if they are called from a closure. The image will show if I come from the parent view controller to the VC with the tableview, but when going back from the detail VC it doesn't show.</p>
  
  <p>According to the code it should be working when stepping through in the debugger, the data values are correct and the image is being set to hidden/not hidden correctly. </p>
  
  <p>Here is the ViewController Class that has the TableView</p>
  
  <pre><code>override func viewDidLoad() {
      super.viewDidLoad()
  }
  
  // We want the table to reload every time the page appears
  override func viewWillAppear(_ animated: Bool) {
      super.viewWillAppear(animated)
      RouteService.instance.getRouteByIdFromFirebase(id: route.id) { [weak self] (route) in
          guard let self = self else {return}
          self.route = route
          // Initialize the ViewModel as the table view delegate
          self.routeDetailsVM.initialize(route : route,routeDetailsVC : self)
          self.segmentsTableView.dataSource = self.routeDetailsVM
          self.segmentsTableView.delegate = self.routeDetailsVM
          DispatchQueue.main.async { [weak self] in
              guard let self = self else { return }
              self.segmentsTableView.reloadData()
          }
      }
  
  }
  </code></pre>
  
  <p>The UITableViewCell Class</p>
  
  <pre><code>class TravelSegmentTableViewCell: UITableViewCell {
  static let cellHeight : CGFloat = 100
  static let identifier = "TravelSegmentTableViewCell"
  
  @IBOutlet weak var completedImage: UIImageView!
  
  
  func initToModel(segment : Segment, routeDetailsVM : RouteDetailsVM) {
      setCompletedImageVisible(segment: segment,completedImage : completedImage)
  }
  
  
  func setCompletedImageVisible(segment : Segment,completedImage : UIImageView) {
      if (segment.status == .finished) {
          // This is getting called correctly but when coming
          // back from the details VC it's not showing the image
          // When coming from parent VC it works
          completedImage.isHidden = false
      }
  }
  </code></pre>
  
  <p>UITableViewDelegate Class</p>
  
  <pre><code>// Cell for Row at Index Path Method
  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -&gt; UITableViewCell {
      let segment = route.segments[indexPath.row]
      let type = segment.type
      switch (type) {
          case .pickup :
              if let cell = tableView.dequeueReusableCell(withIdentifier: PickupSegmentTableViewCell.identifier, for: indexPath) as? PickupSegmentTableViewCell {
                  cell.initToModel(segment: segment,routeDetailsVM: self)
                  return cell
              } else {
                  let cell = PickupSegmentTableViewCell()
                  cell.initToModel(segment: segment, routeDetailsVM: self)
                  return cell
          }
          case .delivery :
              if let cell = tableView.dequeueReusableCell(withIdentifier: DeliverySegmentTableViewCell.identifier, for: indexPath) as? DeliverySegmentTableViewCell {
                  cell.initToModel(segment: segment,routeDetailsVM: self)
                  return cell
              } else {
                  let cell = DeliverySegmentTableViewCell()
                  cell.initToModel(segment: segment, routeDetailsVM: self)
                  return cell
          }
  // This is the cell type in question
      case .travel :
          if let cell = tableView.dequeueReusableCell(withIdentifier: TravelSegmentTableViewCell.identifier, for: indexPath) as? TravelSegmentTableViewCell {
              cell.initToModel(segment: segment, routeDetailsVM: self)
          } else {
              let cell = TravelSegmentTableViewCell()
              cell.initToModel(segment: segment, routeDetailsVM: self)
              return cell
          }
          default :
              return UITableViewCell()
      }
      print("RouteDetailsVM:cellForRowAt indexPath ERROR - Returning blank UITableViewCell for type = \(type)")
      return UITableViewCell()
  }
  </code></pre>