numberOfRowsInSection 在 Alamofire 连接之前被调用

numberOfRowsInSection is called before Alamofire connection

我在viewDidLoad中通过Alamofire获取数据,然后将其放入answerArray。但是,在 Alamofire 连接之前,调用 numberOfRowsInSection 并且 returns 0。如何先通过 Alamofire 获取数据,然后在 numberOfRowsInSection 处获取 eventArray.count

var answerArray = NSMutableArray()

override func viewDidLoad() {
let parameters = [
        "id":questionNum
    ]

    Alamofire.request(.POST, "http://localhost:3000/api/v1/questions/question_detail",parameters: parameters, encoding: .JSON)
        .responseJSON { (request, response, JSON, error) in
            println(JSON!)
            // Make models from JSON data
            self.answerArray = (JSON!["answers"] as? NSMutableArray)!
    }
    self.tableView.reloadData()
}


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

    return answerArray.count

}

行为正常。 UITableView 委托根据需要调用 numberOfRowsInSection

你只需要触发self.tableView.reloadData()刷新table。

Alamofire.request(.POST, "http://localhost:3000/api/v1/questions/question_detail",parameters: parameters, encoding: .JSON)
    .responseJSON { (request, response, JSON, error) in
        println(JSON!)
        // Make models from JSON data
        self.answerArray = (JSON!["answers"] as? NSMutableArray)!
        self.tableView.reloadData()
}

我认为更优雅的方法是每次分配给 answerArray 时重新加载 tableView,这样当您从 API.

收到响应时,tableView 就会自动更新

self.tableView.reloadData() 移动到 didSet 回调中。

var answerArray = NSMutableArray() {
    didSet {
        self.tableView.reloadData()
    }
}