```
class MyOrdersViewController:UITableViewController,GMSMapViewDelegate{

private var username = KeychainWrapper.standard.string(forKey: "username")

var googleStaticImages = [UIImage]()

var OrdersByCutomer = [Booking]()

var orderByCustomer: Booking! = Booking()

var driverPhotoUrlString: String!

var driverPhotoURL = [String]()

var refreshCtrl: UIRefreshControl!

```

This view controller is one of the several view controllers embedded in a UItabViewController. When the tab for this viewController is selected for the first time everything works fine, the data source is updating from the getOrdersByCustomer() and all the order cells are displayed. 
But when an order is placed from another view controller(another tab) and I navigate back to this view controller by using self.tabBarController?.selectedIndex = 2, I am getting the JSON for the new order which was placed from other view controller but the cell for this new order is not showing up.

when the following method is called from viewWillAppear the datasource is updating but the self.tableView.reloadData() doesn't seem to be working and the cell for the newly placed order doesn't show up.

```
func getOrdersByCustomer(){

    if self.refreshCtrl.isRefreshing{

        self.refreshCtrl.attributedTitle = NSAttributedString(string: "Refresh orders..")

    }

    ARSLineProgress.ars_showOnView(self.view)

    Alamofire.request("http://www.*******************************************************ordersbyUser.php?", method: .get, parameters: ["username":username!], encoding: URLEncoding.default).responseString { response in
        print(response.request ?? "")  // original URL request
        print(response.response ?? "") // URL response
        print(response.data!)     // server data
        print(response.result)   // result of response serialization

        if let JSON = response.result.value {
            print("Get Orders By User JSON: " , JSON)

            var jsonObject: [AnyObject]!

            do{
                jsonObject = try JSONSerialization.jsonObject(with: response.data!, options:JSONSerialization.ReadingOptions.allowFragments) as? Array

                print(jsonObject)

                if jsonObject.isEmpty{

                    ARSLineProgress.hideWithCompletionBlock {

                        self.showAlertWithMessage(message: "No orders found.Use the Book Now tab to order!", ControllerTitle: "My Orders", ActionTitle: "OK")

                        if self.refreshCtrl.isRefreshing{
                            self.refreshCtrl.endRefreshing()
                        }

                    }

                }

            } catch let error as NSError {
                print(error)

            }

            var jsonElement: [String:AnyObject]

            for i in 0 ..< jsonObject.count
            {

                jsonElement = jsonObject[i] as! Dictionary

                let staticUrl = jsonElement["staticurl"] as? String

                let orderID = jsonElement["orderid"] as? String
                let customerPrice = jsonElement["userprice"] as? String
                let orderTime = jsonElement["order_time"] as? String
                let orderStatus = jsonElement["stat"] as? String

                let pickUpLatitude = jsonElement["plat"] as? String

                let pickUpLongitude = jsonElement["plon"] as? String
                let dropOffLatitude = jsonElement["dlat"] as? String

                let dropOffLongitude = jsonElement["dlon"] as? String

                let driverphotoURL = jsonElement["driver_photo"] as? String

                print(jsonElement)

                let booking = Booking()

                booking.orderId = orderID!
                booking.price = "₹" + customerPrice!
                booking.pickUpTime = orderTime!
                booking.status = orderStatus!
                booking.pickUpLatitude = pickUpLatitude!
                booking.pickUpLongitude = pickUpLongitude!
                booking.dropOffLatitude = dropOffLatitude!
                booking.dropOffLongitude = dropOffLongitude!
                booking.staticUrl = staticUrl!

                DispatchQueue.main.async{

                    self.OrdersByCutomer.append(booking)

                    if driverphotoURL != nil {

                    self.driverPhotoURL.append(driverphotoURL!)

                        self.refreshTable()

                    }

                }

            }

            if self.refreshCtrl.isRefreshing{
                self.refreshCtrl.endRefreshing()
                self.refreshCtrl.attributedTitle = NSAttributedString(string: "Pull to refresh orders")
            }

            ARSLineProgress.hide()

        }
    }

        }

func refreshTable(){

    DispatchQueue.main.async {

        self.tableView.reloadData()

    }

}

override func numberOfSections(in tableView: UITableView) -> Int {

 return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return OrdersByCutomer.count

}

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

    print("CELL FOR ROW AT INDEX EXCECUTED")

    self.orderByCustomer = self.OrdersByCutomer[(indexPath as NSIndexPath).row] 

    self.driverPhotoUrlString = self.driverPhotoURL[(indexPath as NSIndexPath).row]

    let cell = tableView.dequeueReusableCell(withIdentifier: "MyOrdersCell", for: indexPath) as! MyOrdersCell

    cell.contentView.layer.borderColor = UIColor.clear.cgColor

    cell.contentView.layer.borderWidth = 10

    let staticMapsURL = URL(string:orderByCustomer.staticUrl)

    let p = Bundle.main.path(forResource: "39", ofType: "gif")!
    let data = try! Data(contentsOf: URL(fileURLWithPath: p))

    cell.googleStaticMapImageView.kf.indicatorType = .image(imageData: data)

    cell.googleStaticMapImageView.kf.setImage(with: staticMapsURL)

    // if driver photo is not available use default image

    if driverPhotoUrlString.contains("600x300"){

        cell.driverProfileImage.image = UIImage.init(named: "DriverImage.png")

        cell.driverProfileImage.backgroundColor = UIColor.lightGray

    }else{

    let driverPhotoURL = URL(string: driverPhotoUrlString)

       cell.driverProfileImage.kf.setImage(with: driverPhotoURL)

    cell.driverProfileImage.kf.indicatorType = .activity

    }

    // make the driver profile picture cicular

    cell.driverProfileImage.layer.borderWidth = 1
    cell.driverProfileImage.layer.masksToBounds = false
    cell.driverProfileImage.layer.borderColor = UIColor.black.cgColor
    cell.driverProfileImage.layer.cornerRadius = cell.driverProfileImage.frame.height/2
    cell.driverProfileImage.clipsToBounds = true

    cell.orderIdLabel.text = orderByCustomer.orderId

    cell.orderTimeLabel.text = orderByCustomer.pickUpTime

    cell.userPriceLabel.text = orderByCustomer.price

    cell.statusLabel.text = orderByCustomer.status

    return cell

}

override func viewWillAppear(_ animated: Bool) {

    super.viewWillAppear(true)

    self.animateTable()

    DispatchQueue.main.async {

    self.getOrdersByCustomer()

    }

   print("ViewWillAppear")

}

override func viewDidLoad() {

    super.viewDidLoad()

    tableView.delegate = self
    tableView.dataSource = self

    print("ViewDidLoad")

    self.refreshCtrl = UIRefreshControl()
    self.refreshCtrl.addTarget(self, action: #selector(self.getOrdersByCustomer), for: .valueChanged)
    self.refreshCtrl.attributedTitle = NSAttributedString(string: "Pull to refresh orders")
    self.refreshControl = self.refreshCtrl

}

```

Method in another view controller

```
func transactionCompleted(withResponse response : NSDictionary,errorDescription error:NSError) -> Void {
    self.dismiss(animated: true){

        if response.count != 0{

            print(response)
        }

        self.view.isUserInteractionEnabled = false

    DispatchQueue.main.async {

        self.submitBookingRequest(){(_status,_success) in

             if _status == "yes"{

                self.effectView.removeFromSuperview()

                self.view.isUserInteractionEnabled = true

                let alertController = UIAlertController(title: "Delivery", message: "Delivery order was placed successfull!", preferredStyle: UIAlertControllerStyle.alert)

                let closeAction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.cancel) { (alertAction) -> Void in

                    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

                    let bookNowViewController = mainStoryboard.instantiateViewController(withIdentifier: "ViewController2") as! BookNowViewController

                    self.tabBarController?.selectedIndex = 2

                    self.navigationController?.setViewControllers([bookNowViewController], animated: false)

                }

                alertController.addAction(closeAction)

                self.present(alertController, animated: true, completion: nil)

             }else{

                self.effectView.removeFromSuperview()

                self.showAlertWithMessage(message: "Problem placing the order!Please Contact Customer Care", ControllerTitle: "Order", ActionTitle: "Close")

            }

        }

        }

    }
}

```

}