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

时间:2017-05-03 08:09:57

标签: uitableview firebase swift3 firebase-realtime-database uinavigationcontroller

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

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

UPDATE !!:它没有加载func cellForRow,因为这意味着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 个答案:

答案 0 :(得分:0)

好像是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()  
                */ 

            }
        }
    })
}