просмотр таблицы на вкладке не перезагружается - PullRequest
0 голосов
/ 25 июня 2018

У меня есть TabBar с различными вкладками в моем RestaurantApp. Когда я нажимаю addToCart и перехожу к CartViewContorller, добавленный элемент не показывает, что мне нужно перезапустить приложение, чтобы увидеть элемент там. Я видел подобные вопросы с различными ответами на этот вопрос здесь, но ни одно из решений не работает в моем случае, я действительно не знаю, что случилось. Ниже приведен мой код для CartViewContorller. Я хочу перезагрузить просмотр таблицы каждый раз, когда она загружается. Спасибо всем за помощь

import UIKit
import Alamofire
import os.log

class CartViewController: UITableViewController {

    var cartData = [CartResponse.Cart]()

    override func viewDidLoad() {
        super.viewDidLoad()

        cart()

        tableView.delegate = self
        tableView.dataSource = self

        let nib = UINib(nibName: "viewCartCell", bundle: nil)
        tableView.register(nib, forCellReuseIdentifier: "cartCustomCell")


        let footerView = UIView()
        footerView.backgroundColor = UIColor.red
        footerView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 60)
        tableView.tableFooterView = footerView

    }


    override func viewDidAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

       self.tableView.reloadData()
    }


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

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let cell: CartTableViewCell = self.tableView.dequeueReusableCell(withIdentifier: "cartCustomCell", for: indexPath) as? CartTableViewCell else {
            os_log("Dequeue cell isn't an instance of CustomTableCell", log: .default, type: .debug)
            fatalError()

        }

        cell.recipeNameLbl?.text = cartData[indexPath.row].recipeName
        cell.restaurantNameLbl?.text = cartData[indexPath.row].restaurantName
        cell.addtionalNoteLbl?.text = cartData[indexPath.row].additionalNote
        cell.quantityLbl?.text = cartData[indexPath.row].recipeQuantity
        cell.totalLbl?.text = cartData[indexPath.row].recipePrice
        cell.totalCostLbl?.text = cartData[indexPath.row].totalCost

        return cell
    }

    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 100
    }

    override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

        guard editingStyle == .delete else {return}

        //getting userId from defaults
        let CartId = cartData[indexPath.row].cartId
        let cartId = CartId

        //creating parameters for the post request
        let parameters: Parameters=[
            "cartId":Int(cartId)
        ]

        //Constant that holds the URL for web service
        let URL_SELECT_FROM_CART = "http://localhost:8888/restaurant/deleteFromCart.php?"

        Alamofire.request(URL_SELECT_FROM_CART, method: .post, parameters: parameters).responseJSON {
            response in
            //printing response
            print(response)
        }

        cartData.remove(at: indexPath.row)
        tableView.deleteRows(at: [indexPath], with: .automatic)

    }

    //Fetching from Cart Method
    func cart(){

        //getting userId from defaults
        let defaultValues = UserDefaults.standard
        let userId = defaultValues.string(forKey: "userid")

        //creating parameters for the post request
        let parameters: Parameters=[
            "userId":Int(userId!)!
        ]

        //Constant that holds the URL for web service
        let URL_SELECT_FROM_CART = "http://localhost:8888/restaurant/cart.php?"

        Alamofire.request(URL_SELECT_FROM_CART, method: .post, parameters: parameters).responseJSON {
            (response) in            

            let result = response.data

            do{
                let decoder = JSONDecoder()
                let downloadedCart = try decoder.decode(CartResponse.self, from: result!)
                self.cartData = downloadedCart.cartItem

                DispatchQueue.main.async {
                    self.tableView.reloadData()
                }

            }catch {
                print(error)
            }
        }.resume()
    }

}

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Вы должны вызвать cart() этот метод в viewWillAppear вместо вызова viewDidload

 override func viewWillAppear(_ animated: Bool) {
    self.cart()
}
0 голосов
/ 25 июня 2018

Вы можете использовать:

import UserNotifications NotificationCenter.default.post(name: NSNotification.Name(rawValue: "loadCart"), object: nil)

см. Больше в этом ответе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...