У меня есть приложение, которое извлекает информацию из базы данных Parse и отображает ее в UITableView. Я извлекаю информацию из parse в функции viewWillAppear, и я показываю ее в функции tableView (cellForRowAtIndexPath). Иногда я получаю сообщение об ошибке, потому что массив, в котором хранится информация о парсе, имеет длину 0 и я пытаюсь получить доступ к информации по индексу за пределами границ массива. Я считаю, что это потому, что cellForRowAtIndexPath вызывается до того, как viewWillAppear закончит работу. Возможно ли это, или моя ошибка определенно происходит откуда-то еще?CellForRowAtIndexPath вызывается перед запуском ViewWillAppear
EDIT: ошибка не происходит каждый раз, и я не могу найти способ, чтобы воспроизвести его
override func viewWillAppear(animated: Bool) {
//begin ignoring events until the information is finished being pulled
UIApplication.sharedApplication().beginIgnoringInteractionEvents()
resultsArray.removeAll(keepCapacity: false)
//run query
let query = PFQuery(className: "Answers")
query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
if let objects = objects {
//append information to the resultsArray
}
}
self.tableView.reloadData()
}
}
//information is now pulled, so allow interaction
UIApplication.sharedApplication().endIgnoringInteractionEvents()
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! answerCell
// THIS IS WHERE THE ERROR OCCURS
resultsArray[indexPath.row].imageFile.getDataInBackgroundWithBlock { (data, error) -> Void in
//set image within cell
}
return cell
}
поместить код с вашей стороны –
см код @Graham – rohaldb
пожалуйста, поставить точку останова в 'cellForRowAtIndexPath' затем запустить и посмотреть, шаг за шагом, что происходит. то в то же время вы можете видеть, что ваш arry имеет значение null или нет. –