Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift:Can';t使用Firebase将数据同步到表视图_Ios_Swift_Uitableview_Asynchronous_Firebase - Fatal编程技术网

Ios Swift:Can';t使用Firebase将数据同步到表视图

Ios Swift:Can';t使用Firebase将数据同步到表视图,ios,swift,uitableview,asynchronous,firebase,Ios,Swift,Uitableview,Asynchronous,Firebase,我正在开发一个杂货清单应用程序。当我尝试使用Firebase将数据同步到表视图时,杂货项目无法显示在表视图上。但是,当我重置模拟器时,以前添加的项目可以显示在表视图上,但当我添加另一个项目时,它不能显示在表视图上。我仔细检查了代码,没有发现任何错误。你能帮我修一下吗?(例如,在下面两张图片中,咖啡项目无法显示) GroceryListViewController.swift中的部分代码 override func viewDidAppear(animated: Bool) { super.vi

我正在开发一个杂货清单应用程序。当我尝试使用Firebase将数据同步到表视图时,杂货项目无法显示在表视图上。但是,当我重置模拟器时,以前添加的项目可以显示在表视图上,但当我添加另一个项目时,它不能显示在表视图上。我仔细检查了代码,没有发现任何错误。你能帮我修一下吗?(例如,在下面两张图片中,咖啡项目无法显示)

GroceryListViewController.swift中的部分代码

 override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
//Attach a listener to receive updates.
ref.observeSingleEventOfType(.Value, withBlock: { (snapshot) in

    var newItems = [GroceryItem]()

    for item in snapshot.children
    {
        let groceryItem = GroceryItem(snapshot: item as! FDataSnapshot)
        newItems.append(groceryItem)
    }
    self.items = newItems
    self.tableView.reloadData()
    })
}

1-您正在从文档中使用observeSingleEventOfType(*这相当于observeEventType:withBlock:,除非返回初始数据后立即取消该块)。因此,您的听众被呼叫一次并停止收听。改用observeEventType

2-您应该在主线程上重新加载tableview的数据,如下所示:

 NSOperationQueue.mainQueue().addOperationWithBlock({
      self.tableView.reloadData()
 })

原因是您不能/不能从后台线程与UI交互。由于Firebase是异步的,完成块位于后台线程上-您使用的是文档中的observeSingleEventOfType(*这相当于observeEventType:withBlock:,除了返回初始数据后立即取消块外)。因此,您的听众被呼叫一次并停止收听。改用observeEventType

2-您应该在主线程上重新加载tableview的数据,如下所示:

 NSOperationQueue.mainQueue().addOperationWithBlock({
      self.tableView.reloadData()
 })

原因是您不能/不能从后台线程与UI交互。由于Firebase是异步的,所以完成块位于后台线程上。一旦按下按钮“+”,添加此代码:


这确保了与UI的交互。

点击“+”按钮后添加此代码:


这确保了与用户界面的交互。

也许这是显而易见的,但它发生在我身上。我正在调试,代码在断点处停止,数据不在firebase的控制台中。然后我意识到我必须让它完全运行以刷新。也许这会有帮助……

也许这是显而易见的,但它发生在我身上。我正在调试,代码在断点处停止,数据不在firebase的控制台中。然后我意识到我必须让它完全运行以刷新。也许它能帮上忙…

我添加了这段代码,但它不起作用。tableView保持不变。好的,我刚刚意识到您使用的是observeSingleEventOfType。尝试使用observeEventType(FEventType.ChildChanged,…。我添加了此代码,但无效。tableView保持不变。好的,我刚刚意识到您使用的是ObserveeSingleEventOfType。尝试使用observeEventType(FEventType.ChildChanged,…)。。。。