我有两个字符串数组:一个保存订单号,一个保存地址。
我使用包含以下内容的函数从 viewDidAppear 中的 Firebase 提取数据:
self.localOrderNumberArray.removeAll()
self.localAddressArray.removeAll()
self.orderNumbers.removeAll()
self.addresses.removeAll()
self.tableView.reloadData()
if onItsWayCompanyNameStoreNumberCourierNumberRootRef != nil {
let deliveryRef = onItsWayCompanyNameStoreNumberCourierNumberRootRef.childByAppendingPath("deliveries")
deliveryRef.observeEventType(.ChildAdded, withBlock: { snapshot in
self.orderNumbers.removeAll()
self.addresses.removeAll()
print(snapshot.value.objectForKey("orderNumber"))
let orderNumberPulledFromFirebase = snapshot.value.objectForKey("orderNumber") as! String
self.localOrderNumberArray.insert(orderNumberPulledFromFirebase, atIndex: 0)
let addressPulledFromFirebase = snapshot.value.objectForKey("address") as! String
self.localAddressArray.insert(addressPulledFromFirebase, atIndex: 0)
self.orderNumbers = self.localOrderNumberArray
self.addresses = self.localAddressArray
self.tableView.reloadData()
})
}
该函数使用从 Firebase 提取的数据填充 UITableView。
当我第一次运行该应用程序时,一切都很好。我可以通过不同的函数将数据添加到 Firebase,上面的函数会将新数据拉入 UITableView 就好了。
但是,当我转到另一个 View Controller (在本例中为另一个 UITableView),然后返回到包含上述函数的 View 时,该函数两次填充订单号和地址数组当我添加新数据。
如果我第二次转到另一个 UITableView,然后返回到包含上述函数的 View ,当我添加新数据时,该函数会填充订单号和地址数组 3 次。等等等等。
这是最奇怪的事情。我想不通,它快要把我逼到边缘了。请帮忙。
最佳答案
您正在 viewDidAppear
中调用 deliveryRef.observeEventType
。 viewDidAppear
将在每次显示 ViewController 时调用。因此,当您转到其他 ViewController 并返回时,将再次调用 viewDidAppear
并再次注册 deliveryRef.observeEventType
。因此,实际上有两个监听器在您的 viewController 中执行相同的工作,这会将重复数据添加到数组中。
您必须实现一种逻辑,以便在 ViewController 中仅执行一次 observeEventType
。
关于ios - Firebase 填充数组两次 -- Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37283990/