当我按下按钮进入搜索页面时,应用程序崩溃并返回 “ 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的未捕获异常终止
答案 0 :(得分:0)
此问题与Firebase无关。从您在问题下所写的评论中,您粘贴了此控制台消息instantiated view controller with identifier "UIViewController-vhH-By-pea" from storyboard "Main", but didn't get a UITableView.'
。我相信您已经通过一个UIViewController
类从情节提要中连接了一个UITableViewController
屏幕。这是错误的,您需要将您的类更改为UIViewController
而不是UITableViewController
的子类。然后,将SearchTableView
的委托和dataSource设置为它。
因此,您的课程应该是:
class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, ... {
然后在self
方法中将TableView的委托和dataSource设置为viewDidLoad
:
override func viewDidLoad() {
super.viewDidLoad()
// ...
SearchTableView.dataSource = self
SearchTableView.delegate = self
// ...
}
顺便说一句,如果您的控制器中只有UITableView
,而没有其他内容,那么您可能要考虑使用UITableViewController
而不是UIViewController
和{{ 1}}。 UITableView
本质上是UITableViewController
,其中UIViewController
是其主要视图,因此无需重做所有工作:)