Я пытаюсь реализовать UITableView. Я уже смог заставить его работать, но он продолжал показывать строки в пустых ячейках, поэтому я посмотрел онлайн и нашел решение, которое должно было разместить UIView в tableFooterView, поэтому я сделал это:UITableView генерирует исключение при добавлении UIView в tableFooterView
В первом представлении таблицы, которое я настроил, он работал нормально, но знаю, что я пытаюсь реализовать вторую и не работать. Если я запускаю его без строки выше, все работает нормально, но я получаю строки в пустых ячейках. Если я бегу с линией выше, я получаю «неустранимая ошибка: неожиданно обнаружил ноль, а разворачивание необязательное значение», и XCode указывает на ошибку в этой строке:
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.itemsList.count // Throws error: Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
}
Кто-нибудь знает, почему это происходит? Или как я могу это исправить? Или, если есть лучший, более быстрый способ скрыться от строк на пустых ячейках? Благодаря!
Вот мой UIViewController класс для справки:
class InfoPickerViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var infoPicker: UITableView!
private var pageTitle: String!
private var itemsList: [String]!
convenience init(title: String){
self.init()
self.pageTitle = title
}
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()
self.title = self.pageTitle
self.infoPicker.delegate = self
self.infoPicker.dataSource = self
self.infoPicker.tableFooterView = UIView()
self.infoPicker.registerNib(UINib(nibName:"SimpleTableViewCell", bundle: nil), forCellReuseIdentifier: "simpleCell")
populateItemsList()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func populateItemsList() {
let clientsInfo = ClientsInfo()
self.itemsList = []
switch self.pageTitle {
case "Cliente": self.itemsList = clientsInfo.getClientsList()
default: self.itemsList = []
}
}
// MARK: TableView
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.itemsList.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let listItemCell = infoPicker.dequeueReusableCellWithIdentifier("simpleCell", forIndexPath: indexPath) as! SimpleTableViewCel
listItemCell.itemLabel.text = self.itemsList[indexPath.row]
return listItemCell
}
}
Хорошо, мне удалось заставить его работать, добавляя UIView непосредственно в файл .xib, а не программно. Тем не менее, я хотел знать, откуда исходит ошибка. –
Я описал, где ошибка появилась в моем ответе. У вас есть неинициализированный 'itemsList: [String]!', Когда ваш 'numberOfRowsInSection' пытается получить доступ к значению, значение равно nil и ваше приложение аварийно завершает работу. Мое решение разрешает это, предоставляя вашему массиву начальное значение. –