带有 Firebase 数据库的导航控制器和表格视图

Posted

技术标签:

【中文标题】带有 Firebase 数据库的导航控制器和表格视图【英文标题】:Navigation controller and Table view with firebase database 【发布时间】:2017-05-03 08:09:56 【问题描述】:

我有下面的代码,它是一个从 Firebase 数据库中获取姓名、电话和邮件的简单地址簿。这一切都很完美,直到我添加了一个导航控制器来访问导航栏和搜索功能。

现在我的 Tableview 不会显示数据库中的任何内容,我不知道它做了什么,但它的导航控制器阻止了某些东西...请帮助!!

更新!!:它没有加载 func cellForRow,witch ofcause 意味着 numberOfRows 返回 0...如果我插入一个刹车点,我可以看到 Handle 从数据库中获取了一个名称,所以它们仍然是连接的,但是我有一些干扰.

class TableVC: UITableViewController 
var Telefonbog: [String] = []
var Handle: FIRDatabaseHandle?
var Ref: FIRDatabaseReference?
var searchController: UISearchController!
var resultController = UITableViewController()
static var _Mail = ""
static var _Mobil = ""
static var _Navn = ""

override func viewDidLoad()

    super.viewDidLoad()
    self.searchController = UISearchController(searchResultsController: self.resultController)
    self.tableView.tableHeaderView = self.searchController.searchBar
    Ref = FIRDatabase.database().reference()
    Handle = Ref?.child("medarbejder EL").observe(.childAdded, with:  (snapshot) in
        if let item = snapshot.value as? String
        
            self.Telefonbog.append(item)
            self.reloadInputViews()
        
    )


//opætning af telefonbog i tableview
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int

    return Telefonbog.count


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

    let bog = UITableViewCell(style: .default, reuseIdentifier: "bog")
    bog.textLabel?.text = Telefonbog[indexPath.row]
    return bog


override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)

    let currentcell = Telefonbog[indexPath.row]
    Ref = FIRDatabase.database().reference()
    Ref?.child("medarbejder EL").child(currentcell).observeSingleEvent(of: .value, with:  (snapshot) in
        let value = snapshot.value as? NSDictionary
        let Mail = (value?["Mail"] as? String)!
        let Mobil = (value?["Mobil"] as? String)!
        TableVC._Mail = Mail
        TableVC._Mobil = Mobil
        TableVC._Navn = currentcell
        self.performSegue(withIdentifier: "kontakt", sender: self)
    )


【问题讨论】:

【参考方案1】:

好像是ui更新问题。得到结果后,异步更新ui组件。

你会试试这个吗? (斯威夫特 2.3)

// Move to a background thread to do some long running work
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) 
    Handle = Ref?.child("medarbejder EL").observe(.childAdded, with:  (snapshot) in

        if let item = snapshot.value as? String
           //Update ui on main-thread 
            dispatch_async(dispatch_get_main_queue()) 
                self.Telefonbog.append(item)
                self.reloadInputViews()
                /*
                 *  I think your tableView refresh call in "reloadInputViews()"
                 *   If not add this line.
                 *  self.tableView.reloadData()  
                */ 

            
        
    )

【讨论】:

以上是关于带有 Firebase 数据库的导航控制器和表格视图的主要内容,如果未能解决你的问题,请参考以下文章

TableView 作为带有导航控制器的子视图

iphone导航控制器和表格视图

可可 iphone fetchedResultsController 排序

带有表格视图的视图仅适用于默认视图控制器

如何在界面生成器的导航控制器中调整子视图的大小

使用导航栏按钮项和核心数据在视图控制器之间传递日期