Swift UITableView возвращает ячейку из массива массивов

#ios #uitableview #segmentation-fault #swift

#iOS #UITableView #ошибка сегментации #swift

Вопрос:

Я возился со swift, создавая контроллер представления таблицы, используя предварительно сгенерированные ячейки, а не повторно используя ячейки, и в настоящее время у меня есть массив, который содержит массивы MyCustomCell, например:

пусть разделы = [[ячейка1, ячейка2, ячейка3], [ячейка4, ячейка5], [ячейка6]]

Таким образом, в моем numberOfSectionsInTableView я делаю следующее:

 override func numberOfSectionsInTableView(tableView: UITableView?) -> Int {
        return sections.count
}
  

.. и в моей numberOfRowsForSection я делаю:

 override func tableView(tableView: UITableView?, numberOfRowsInSection section: Int) -> Int {
        return sections[section].count
}
  

Все это работает нормально и отлично. При попытке захватить ячейку из ее массива мне сложнее, я вижу всевозможные проблемы и хотел бы знать, как это лучше реализовать. Следующий, кажется, самый простой метод, и я реализовал то же самое в нескольких разных формах, но я даже не могу создать проект и получить результирующую ошибку:

 override func tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath?) -> UITableViewCell? {
      var arrayForSection = sections[indexPath!.section]
      var cell: MyCustomCell = arrayForSection[indexPath!.row] as MyCustomCell
      return cell
}
  
  1. При отправке SIL для ‘TableView’ в /Users/blah/ blah / blah/MyCustomCell/Пример MyCustomCell/MyCustomCell
    Пример/ExampleTableViewController.swift:125:14:0: ошибка:
    невозможно выполнить команду: ошибка сегментации: 11:0: ошибка:
    команда интерфейса swift завершилась ошибкой из-за сигнала (используйте -v, чтобы увидеть вызов)
    Команда
    сбой / Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift
    с кодом выхода 254

Не уверен, в чем здесь проблема, но может ли кто-нибудь придумать простую реализацию для возврата соответствующей ячейки и заставить ее фактически скомпилироваться?

Ответ №1:

Не уверен, было ли то, что я видел с ошибкой seg-fault, ошибкой или нет, но изменение кода в cellForRowAtIndexPath на следующий, похоже, помогает:

 override func tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath?) -> UITableViewCell? {
        let cellsForSection: MyCustomCell[] = sections[indexPath!.section] as Array
        return cellsForSection[indexPath!.row] as MyCustomCell
 }
  

В качестве альтернативы, более конкретная информация о типах при создании переменных упрощает задачу.
Изменение этого:

     var sections = []
    var firstSectionCells = []
    var secondSectionCells = []
    var thirdSectionCells = []
    sections = [firstSectionCells, secondSectionCells, thirdSectionCells] // I do this later
  

к этому:

     var sections: MyCustomCell[][] = []
    var firstSectionCells: MyCustomCell[] = []
    var secondSectionCells: MyCustomCell[] = []
    var thirdSectionCells: MyCustomCell[] = []
    sections = [firstSectionCells, secondSectionCells, thirdSectionCells] // I do this later
  

результаты позволяют сделать это вместо этого, что немного более лаконично:

 override func tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath?) -> UITableViewCell? {
        let cellsForSection = sections[indexPath!.section]
        return cellsForSection[indexPath!.row]
    }