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
}
}