SIGABRT в UITableView

#ios #uitableview #swift #sigabrt

#iOS #uitableview #swift #sigabrt

Вопрос:

У меня есть этот код, который я скопировал из приложения MasterDetail по умолчанию, но когда я запускаю программу, она останавливается на строке с объявлением ячейки. И я понятия не имею, почему.

 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell

    let object = objects[indexPath.row].title as String
    cell.textLabel.text = object
    return cell
}
  

Ответ №1:

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

    Я надеюсь, вы забыли это сделать.

     self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell")
      
  2. Если вы не зарегистрировали ячейку для tableview, то она может вернуть nil в ячейку.

Apple заявляет

 let == Constant

var == variable values at any time
  

Итак, используя? будет рассматриваться как необязательный

у вас должно быть вот так

 override func viewDidLoad() {
    super.viewDidLoad()

    self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell")
}


func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {

    var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)

    //OR

    //var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("Cell") as? UITableViewCell

    //Your stuff

    return cell
}
  

Ответ №2:

Согласно этому руководству от Apple, вы можете захотеть проверить табличный вид на панели раскадровки.

Найдите инспектор атрибутов для табличного представления и убедитесь, что для поля «содержимое» установлено значение «Динамические прототипы». Обновление этого исправило это для меня.

Кроме того, пока у вас открыт доступ, убедитесь, что в табличном представлении есть одна ячейка таблицы, и убедитесь, что в поле «Идентификатор» установлено значение, указанное вами при tableView.dequeueReusableCellWithIdentifier вызове метода (в вашем случае «ячейка»)