ios - 从 Firebase 解析数据时无法成功重新加载 UITableView 元素

标签 ios swift uitableview firebase firebase-realtime-database

我正在制作一个应用程序,用户可以在其中买卖门票。用户可以创建新票证并成功上传到 Firebase,但是对票证 ID 的引用存储在用户数据中,该用户数据引用票证数据中的票证 ID。数据库结构如下:

数据库

  • 用户
  • 门票

门票

  • 门票信息

用户

  • 他们正在销售的门票的用户信息和门票 ID

我的问题是,第一次从售票处加载门票时一切都很好。但是,当用户添加他们正在销售的新门票时, TableView 会加载所有内容两次。

override func viewWillAppear(_ animated: Bool) {
    self.tickets = []
    DataService.ds.REF_USER_CURRENT.child("selling").observe(.value, with: { (snapshot) in //HERE WE REFERNCE OUR SINGELTON CLASS AND OBSERVE CHAMGE TO THE POSTS OBJECT
        self.tickets = [] //WE CLEAR THE POSTS ARRAY BEFORE WE START MANIPULATION TO MAKE SURE THAT WE DONT REPEAT CELLS
        if let snapshot = snapshot.children.allObjects as? [DataSnapshot]{
            print("ADAM: \(snapshot)")//CHECKING THAT THE OBJECTS EXIST AS AN ARRAY OF DATA SNAPSHOTS
            for snap in snapshot {
                DataService.ds.REF_TICKETS.child(snap.key).observe(.value, with: { (snapshot) in

                    if let ticketDict = snapshot.value as? Dictionary<String, AnyObject>{

                        let ticket = Ticket(ticketID: snap.key, ticketData: ticketDict)

                        self.self.tickets.append(ticket)
                    }

                    self.sell_ticketsTableView.reloadData()
                })
            }

        }
        //self.sell_ticketsTableView.reloadData()
        self.tickets = []//RELAOD THE DATA
    })
}

我不太确定我哪里出了问题。

最佳答案

请将您的代码更改为此。我添加了清除数组的部分

  override func viewWillAppear(_ animated: Bool) {
        self.removeAll() // This is how you clear your array
        DataService.ds.REF_USER_CURRENT.child("selling").observe(.value, with: { (snapshot) in //HERE WE REFERNCE OUR SINGELTON CLASS AND OBSERVE CHAMGE TO THE POSTS OBJECT
            self.tickets = [] //WE CLEAR THE POSTS ARRAY BEFORE WE START MANIPULATION TO MAKE SURE THAT WE DONT REPEAT CELLS
            if let snapshot = snapshot.children.allObjects as? [DataSnapshot]{
                print("ADAM: \(snapshot)")//CHECKING THAT THE OBJECTS EXIST AS AN ARRAY OF DATA SNAPSHOTS
                for snap in snapshot {
                    DataService.ds.REF_TICKETS.child(snap.key).observe(.value, with: { (snapshot) in

                        if let ticketDict = snapshot.value as? Dictionary<String, AnyObject>{

                            let ticket = Ticket(ticketID: snap.key, ticketData: ticketDict)

                            self.tickets.append(ticket)
                        }

                        self.sell_ticketsTableView.reloadData()
                    })
                }

            }
            //self.sell_ticketsTableView.reloadData()
        })
    }

关于ios - 从 Firebase 解析数据时无法成功重新加载 UITableView 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46636623/

相关文章:

ios - 在单元测试中手动向左滑动以调用处理程序以在 Swift 中进行测试

c++ - 在 C++ 中获取 iPhone 目录路径

ios - 在点击 UILabel(手势识别器)时,在一个单元格的 tableview 原型(prototype)单元格中找到 nil 并且它在另外两个单元格中工作正常

iOS Facebook sdk 3.14 - 无法再获取好友列表?

ios - 与自定义类而不是 SLComposeServiceViewController 共享扩展

swift - 在异步任务后插入 UIViewtable

ios - 现在 TestFlight Live 已成为私有(private) FlightPath 测试版,我们是否仍可以将 TestFlight 保留在生产版本中?

ios - 将 NSURLCredential forTrust 永久保存在钥匙串(keychain)中

ios - 在 Swift 3 iOS 8 应用程序中集成 GIF

objective-c - UITableView 一次删除所有行