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