#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
}
- При отправке 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]
}