Post

Replies

Boosts

Views

Activity

Build succeeded but App crashes -Thread 1: must pass a class of kind UITableViewCell Ask Question Asked today Modifie
Hello world! It's my first post. I'm learning to develop by myself and now I face to an app crash with Thread 1: "must pass a class of kind UITableViewCell". I don't know what I have to do. I also face some problems in the log in and log out with the simulator it didn't go to to the desired page. I shared the codes below. I can't go further before fixing this. Thanks a lot!. I'll be very reactive to your answers. Have a nice day! import UIKit @main # class AppDelegate: UIResponder, UIApplicationDelegate { **Thread 1: "must pass a class of kind UITableViewCell" ** func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { FirebaseApp.configure() return true } // MARK: UISceneSession Lifecycle func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) } func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) { } } I'm almost sure that the problem is in the SettingsViewController but with my level it's not obvious yet. struct SettingCellModel { let title: String let handler: (() -> Void) } /// View Controller to show user settings final class SettingsViewController: UIViewController { private let tableView: UITableView = { let tableView = UITableView(frame: .zero, style: .grouped) tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") return tableView }() private var data = [[SettingCellModel]]() override func viewDidLoad() { super.viewDidLoad() configureModels() view.backgroundColor = .systemBackground view.addSubview(tableView) self.tableView.dataSource = self self.tableView.delegate = self } override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() tableView.frame = view.bounds } private func configureModels() { let section = [ SettingCellModel(title: "Log Out") { [weak self] in self?.didTaplogOut() } ] data.append(section) } private func didTaplogOut() { let actionSheet = UIAlertController(title: "Log Out", message: "Are you sure you want to log out?", preferredStyle: .actionSheet) actionSheet.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil)) actionSheet.addAction(UIAlertAction(title: "Log Out", style: .destructive, handler: { _ in AuthManager.shared.logOut(completion: { success in DispatchQueue.main.async { if success { // present log in let loginVC = LoginViewController() loginVC.modalPresentationStyle = .fullScreen self.present(loginVC, animated: true) { self.navigationController?.popToRootViewController(animated: false) self.tabBarController?.selectedIndex = 0 } } else { // error occured fatalError("Could not log Out user") } } }) })) actionSheet.popoverPresentationController?.sourceView = tableView actionSheet.popoverPresentationController?.sourceRect = tableView.bounds present(actionSheet, animated: true) } } extension SettingsViewController: UITableViewDelegate, UITableViewDataSource { func numberOfSections(in tableView: UITableView) -> Int { return data.count } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return data[section].count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) cell.textLabel?.text = data[indexPath.section][indexPath.row].title return UITableViewCell() } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { tableView.deselectRow(at: indexPath, animated: true) // handle cell selection } }
2
0
1.6k
Mar ’22