Swift 我试图创建一个搜索页面,让用户在整个数据库中搜索其他用户,但应用程序不断崩溃

Swift 我试图创建一个搜索页面,让用户在整个数据库中搜索其他用户,但应用程序不断崩溃,swift,firebase,firebase-realtime-database,firebase-authentication,Swift,Firebase,Firebase Realtime Database,Firebase Authentication,当我按下按钮进入搜索页面时,应用程序崩溃并返回 “libc++abi.dylib:以NSException类型的未捕获异常终止” 我对编码还是新手,我不确定自己做错了什么 @IBOutlet weak var SearchTable: UITableView! var userArray = [NSDictionary?]() var filteredUsers = [NSDictionary?]() var dataRef = Database.database(

当我按下按钮进入搜索页面时,应用程序崩溃并返回 “libc++abi.dylib:以NSException类型的未捕获异常终止” 我对编码还是新手,我不确定自己做错了什么

 @IBOutlet weak var SearchTable: UITableView!

    var userArray = [NSDictionary?]()
    var filteredUsers = [NSDictionary?]()

    var dataRef = Database.database().reference()

    let searchController = UISearchController(searchResultsController: nil)

    override func viewDidLoad() {
        super.viewDidLoad()

        searchController.searchResultsUpdater = self
        searchController.dimsBackgroundDuringPresentation = false
        definesPresentationContext = true
        tableView.tableHeaderView = searchController.searchBar

        dataRef.child("users").queryOrdered(byChild: "username").observe(.childAdded, with: { (snapshot) in

            self.userArray.append(snapshot.value as? NSDictionary)

            self.SearchTable.insertRows(at: [IndexPath(row: self.userArray.count-1, section: 0)], with: UITableView.RowAnimation.automatic)


        }) { (error) in
            print(error.localizedDescription)
        }

    }

    // MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        if searchController.isActive && searchController.searchBar.text != "" {
            return filteredUsers.count
        }
        return self.userArray.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "SearchCell", for: indexPath)

        let user : NSDictionary?

        if searchController.isActive && searchController.searchBar.text != "" {
            user = filteredUsers[indexPath.row]
        } else {
            user = self.userArray[indexPath.row]
        }

        cell.textLabel?.text = user?["username"] as? String



        return cell
    }

    func updateSearchResults(for searchController: UISearchController) {

        filterContent(searchText: self.searchController.searchBar.text!)

    }

    func filterContent(searchText:String)
    {
        self.filteredUsers = self.userArray.filter{ user in

            let Uname = user!["username"] as? String

            return(Uname?.lowercased().contains(searchText.lowercased()))!

        }

        tableView.reloadData()
    }



}
我期待页面打开,我有能力搜索与搜索栏。我收到的错误消息是
libc++abi.dylib:以NSException类型的未捕获异常终止此问题与Firebase无关。根据您在问题下所写的评论,您粘贴了此控制台消息
实例化的视图控制器,其标识符为故事板“Main”中的“UIViewController vh By pea”,但未获得UITableView.
。我相信您已经将故事板上的
UIViewController
屏幕与
UITableViewController
类连接起来。这是错误的,您需要将类更改为
UIViewController
的子类,而不是
UITableViewController
。然后,将
SearchTableView
的委托和数据源设置为它

因此,你的课程应该是:

class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, ... {
然后在
viewDidLoad
方法中将TableView的委托和数据源设置为
self

override func viewDidLoad() {
    super.viewDidLoad()
    // ...
    SearchTableView.dataSource = self
    SearchTableView.delegate = self
    // ...
}

顺便说一下,如果你的控制器中只有一个<代码> UITababyVIEW/COD>,那么,你可以考虑使用<代码> UITableViewController < /代码>而不是使用<代码> UITababVIEW > <代码> UIViewController <代码>。code>UITableViewController本质上是一个
UIViewController
,其中一个
UITableView
是它的主视图,因此无需重复所有工作:)

在控制台中,应该会有一条消息,但您收到的除外。还应该有一个回溯,显示崩溃的特定代码行。使用此信息跟踪异常的原因。我仍在学习,所以我不完全理解您的意思,是吗?***由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:'-[UITableViewController loadView]标识符为“UIViewController vhH By pea”的实例化视图控制器从故事板“主”,但没有得到一个UITableView。“哟,伙计,非常感谢你!我已经沮丧了几天,这就解决了它。你是对的,我把它改成了桌面视图谢谢!!!谢谢,谢谢!@Peakz如果他/她的回答对你有帮助,你应该接受。