UITableView и ячейки из массива моделей - PullRequest
0 голосов
/ 04 мая 2019

Я застрял на чем-то, чего я не совсем понимаю, так как из нескольких тестов похоже, что генерация ячейки таблицы происходит раньше, но не так хорошо после загрузки страницы и запроса Alamofire.

Если вы видите ниже, я пытаюсь добраться туда, где просматриваются исходящие грузы нашего музея после ссылки на профи:

import Alamofire
import SwiftyJSON

class ShipmentProSearchResultsTableViewController: UITableViewController {

    var pronumber:String = ""
    var shipments = [Shipment]()
    typealias JSONStandard = [String: AnyObject]

    override func viewDidLoad() { 
        super.viewDidLoad()
        fetchShipments()

    }

    func fetchShipments() {
        let parameters: Parameters = ["pro_number": pronumber]
        let todoEndpoint: String = "OURHOST/shipments/api/details/pro"
        Alamofire.request(todoEndpoint, method: .get, parameters: parameters)
            .responseJSON { response in
            if response.result.isSuccess{
                let shipmentJSON : JSON = JSON(response.result.value!)
                for (index, subJson):(String, JSON) in shipmentJSON{
                    let proNumber = subJson["proNumber"].int
                    let consigneeName = subJson["consignee"]["name"].string
                    let shipment = Shipment(proNumber: proNumber!, consigneeName: consigneeName!)

                    self.shipments.append(shipment)
                }
                print(self.shipments)
            }else{
                print("Could not get results")
            }
        }
    }


    // MARK: - Table view data source

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


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "ShipmentCell", for: indexPath)
        let shipment = shipments[indexPath.row]

        cell.textLabel?.text = "Hello"
        cell.detailTextLabel?.text = "\(shipment.proNumber)"

        return cell
    }
}

Теперь, где я напечатал self.shipments, я получаю следующие результаты:

[OakRidgeArchaeologicalRepositoryDispatcher.Shipment(proNumber: 471008276, consigneeName: "A1 CHICAGO INSTITUTE OF THE ARTS")]

Итак, я знаю, что данные соответствующим образом передаются в модель. Также отмечу, что идентификатор ячейки табличного представления в раскадровке правильно установлен на ShipmentCell. Но после запроса в моей таблице ничего не появляется.

Я использую Swift 4.

1 Ответ

0 голосов
/ 04 мая 2019

Вы должны перезагрузить tableView после обновления поля источника.

func fetchShipments() {
        let parameters: Parameters = ["pro_number": pronumber]
        let todoEndpoint: String = "OURHOST/shipments/api/details/pro"
        Alamofire.request(todoEndpoint, method: .get, parameters: parameters)
            .responseJSON { response in
            if response.result.isSuccess{
                let shipmentJSON : JSON = JSON(response.result.value!)
                for (index, subJson):(String, JSON) in shipmentJSON{
                    let proNumber = subJson["proNumber"].int
                    let consigneeName = subJson["consignee"]["name"].string
                    let shipment = Shipment(proNumber: proNumber!, consigneeName: consigneeName!)

                    self.shipments.append(shipment)
                }
                tableView.reloadData() //<-------add this.
                print(self.shipments)
            }else{
                print("Could not get results")
            }
        }
    }
...