При запуске у меня установлено приложение для получения данных из Firebase, создания объектов и добавления их в массив, где они добавляются в UITableView.Даже если каждый объект создается индивидуально, элементы создаются, но не добавляются в UITableView, пока не будет создан каждый объект из данных.
Firebase работает в основном потоке, поэтому проблема не в GCD.Я запускаю retrieveData () в viewDidLoad.
Кажется, что элементы помещаются в память (не добавлены в табличное представление?) И продолжают складываться, пока не будут созданы все элементы.В этот момент все загружается в просмотр таблицы, и использование памяти возвращается к нормальному.Это приводит к чрезвычайно высокому использованию памяти и сбою при наличии достаточного количества элементов.
func retrieveData(){
let dateString = getDate()
ref = Database.database().reference()
ref.child("orders/").child(Auth.auth().currentUser!.uid).child(dateString).child("products").observeSingleEvent(of: .value, with: { (snapshot) in
let value = snapshot.value as? NSDictionary
if (value != nil){
for (key) in value! {
let item = key.value as? [String:Any]
let (barcode, name, _, bottleSize) = self.getInfo(code: item!["code"]! as! String)
self.generateItem(barcode: barcode, name: name, bottleSize: bottleSize, quantity: item!["quantity"]! as! String, isInitial: true)
}
}
}) { (error) in
print(error.localizedDescription)
}
}
func generateItem(barcode: String, name: String, bottleSize: String, quantity: String, isInitial: Bool = false) {
let i = item(code: barcode, name: name, size: bottleSize, quantity: quantity)
order.append(i)
print("Item Created --- ", order[order.count - 1].name,order[order.count - 1].quantity,order[order.count - 1].code)
let indexPath = IndexPath(row: order.count - 1, section: 0)
orderTableView.beginUpdates()
orderTableView.insertRows(at: [indexPath], with: .automatic)
orderTableView.endUpdates()
// Update Firebase database
if (isInitial == false){
updateDatabase()
}
}