Я получаю данные от Alamofire в viewDidLoad
, а затем помещаю его в answerArray. Однако перед подключением Alamofire вызывается numberOfRowsInSection
и возвращает 0. Как я могу получить данные по Alamofire, а затем получить eventArray.count
по адресу numberOfRowsInSection
?numberOfRowsInSection вызывается до подключения Alamofire
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
}
Отличный метод. Я действительно думаю, что это была ошибка в коде @ yomihito. Но тем не менее, очень умная техника. Используя этот подход, исходный 'self.tableView.reloadData()' должен полностью исчезнуть. – SwiftArchitect
Да, это правильно (+1). Но стоит отметить, что это просто немного хрупко, потому что его правильная работа зависит от деталей реализации закрытия обработчика 'responseJSON'. Что, если это закрытие не заменило 'answerArray', а скорее удалило старые объекты и добавило новые? В этом случае это не сработает. Всегда нужно быть осторожным с 'didSet' с изменяемыми объектами, потому что он не обнаруживает изменений внутри объекта, только если объект полностью заменен. Кроме того, в мире MVC объекты модели действительно не должны обновлять объекты просмотра. – Rob