#ios #swift #firebase #tableview #firebase-realtime-database
#iOS #swift #firebase #просмотр таблицы #firebase-realtime-database
Вопрос:
Прикрепленный скриншот проблемы при попытке отображения в виде таблицы. Я продолжаю получать сообщение об ошибке:
Не удалось получить ячейку из списка классов источника данных: UITableViewController {
var users = [user]()
override func viewDidLoad() {
let databaseRef = FIRDatabase.database().reference()
databaseRef.child("Users").queryOrderedByKey().observe(.childAdded, with: {
snapshot in
print(snapshot)
let addNote = (snapshot.value as? NSDictionary)?["addNote"] as? String ?? ""
let uid = (snapshot.value as? NSDictionary)?["uid"] as? String ?? ""
self.users.append(user(addNote: addNote,uid: uid))
self.tableView.reloadData()
print(self.users)
})
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print("Test(users.count)")
return users.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")
let nameLbl = cell?.viewWithTag(2) as! UILabel
nameLbl.text = self.users[indexPath.row].addNote
return cell!
}
Комментарии:
1. Где вы создаете
cell
? Ваш код как есть даже не будет компилироваться2. Я пытался получить из firebase .. используя swift3 Xcode 8… но когда я запускаю этот код с пользовательской ячейкой, он выдает ту же ошибку
3. Вы не можете запустить опубликованный вами код, он даже не будет компилироваться. Скопируйте и вставьте ваш фактический
cellForRowAtIndexPath
метод.4. Кстати, если вы новичок в iOS и Swift, вы должны использовать Xcode 8 и Swift 3.
5. Пожалуйста, проверьте скриншот, который я прикрепил по предоставленной ссылке
Ответ №1:
вам придется удалить tableviewcells
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier, for: indexPath) as! UITableViewCell
return cell
}
Ответ №2:
ok…as насколько я понимаю, у вас есть отдельный файл .xib для вашей tableViewCell, а не прототип ячейки, поскольку вы пытаетесь зарегистрировать свой nib в tableview перед его использованием. Итак, чтобы это произошло правильно, вам необходимо обеспечить несколько вещей:
- Вы указали идентификатор для своей ячейки TableView в файле .xib.
-
Вы используете этот идентификатор для регистрации этой ячейки, например.
пусть nib = UINib(nibName: «MyTableViewCell», bundle: nil)
self.TableView.registerNib(nib, forCellReuseIdentifier: «abc»)
Здесь «abc» является идентификатором.
-
Затем в делегате cellForRowAtIndexPath,
пусть cell = TableView.dequeueReusableCellWithIdentifier(«abc», forIndexPath: indexPath) как! MyTableViewCell
Я думаю, вам следует использовать описанные выше шаги, чтобы зарегистрировать перо, а затем удалить его. Все должно работать нормально.
Комментарии:
1. Посмотрите на код в вопросе. Операционная система уже вызывается
register
.2. В коде ни одна конкретная ячейка не регистрируется и не удаляется … и даже если вы не хотите удалять (по какой-либо причине), по крайней мере, вам нужно создать экземпляр класса cell, чтобы выполнять функции, которые выполняются в cellForRow…..
3. спасибо за ваш ответ, Мэдди. Пожалуйста, проверьте скриншот, который я прикрепил по предоставленной ссылке