尝试从Firebase检索数据时未调用tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath)函数

时间:2018-07-23 13:37:09

标签: swift uitableview firebase firebase-realtime-database

我是Stack Overflow的新手,所以请保持柔和!

我正在设计一个应用,该应用可从firebase中检索对象并将其显示在fire base中。

我在此处配置Firebase:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    FIRApp.configure()
    FIRDatabase.database().persistenceEnabled = true
    // Override point for customization after application launch.
    return true
}

但是,我发现在运行该应用程序时,我只得到了一个空白的白色屏幕。经过一些调试后,我意识到这是因为未达到TableView(cellForRowAt indexPath:IndexPath)代码块:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath)
let BUCSItem = items[indexPath.row]
   cell.textLabel?.text = BUCSItem.name
        print("should show bucs")
        return cell    
   }

我还有另一个必需的tableView方法:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return items.count
}

这是我的viewDidLoad:

override func viewDidLoad() {   
    super.viewDidLoad()

    let ref = FIRDatabase.database().reference(withPath: "BUCS-items")
    tableView.allowsMultipleSelectionDuringEditing = false

    ref.queryOrdered(byChild: "BUCSgoals").observe(.value, with: { snapshot in
        var newItems: [BUCSItem] = []
        for child in snapshot.children {
            if let snapshot = child as? FIRDataSnapshot,
                let BUCSItem = BUCSItem(snapshot: snapshot) {
                newItems.append(BUCSItem)
            }
        }
        self.items = newItems

        self.tableView.reloadData()
    })

}

但是这很奇怪。当我断开与Internet的连接时,它可以很好地工作,并且项目按预期显示在表中。只有当连接到互联网时,它们才会显示。

这是断开连接时的样子: 连接时相同,但名称未出现在表中。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

我认为这是一个快速更新转换

ref.queryOrdered(byChild: "BUCSgoals").observe(.value

ref.queryOrdered(byChild: "BUCSgoals").observeSingleEvent(.value