J'ai des problèmes avec mon fichier de cellules personnalisées dans Tableview. J'ai réussi à le faire en utilisant la ligne de commentaire ci-dessous, mais les performances étaient vraiment mauvaises lorsqu'il y avait plus de 10 cellules. L'utilisation de DequeueReusableCell conduit à cette erreur :
NSInternalInconsistencyException', reason : 'unable to dequeue a cell with identifier DiveNewsShort - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'.
ce qui est étrange, car j'enregistre bien la nib dans viewDidLoad(). J'espère que vous pourrez m'aider, je suis de plus en plus frustré par cette situation.
class ProfilTableView: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(UINib(nibName: "DiveNewsShort", bundle: nil), forCellReuseIdentifier: "DiveNewsShort")
tableView.register(DiveNewsShort.self, forCellReuseIdentifier: "DiveNewsShort")
}
public override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// let cell = Bundle.main.loadNibNamed("DiveNewsShort", owner: self, options: nil)?.first as! DiveNewsShort
// This one works as expected
let cell = tableView.dequeueReusableCell(withIdentifier: "DiveNewsShort", for: indexPath) as! DiveNewsShort
// This one does not
return cell }
Mise à jour :
J'ai réussi à me débarrasser de l'erreur en ajoutant la fonction registre dans la fonction cellForRowAt, mais je ne pense pas que ce soit une méthode efficace. Cela devrait fonctionner dans la fonction vieDidLoad, n'est-ce pas ?
public override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
tableView.register(UINib(nibName: "DiveNewsShort", bundle: nil), forCellReuseIdentifier: "DiveNewsShort")
let cell = tableView.dequeueReusableCell(withIdentifier: "DiveNewsShort", for: indexPath) as! DiveNewsShort
return cell }