swift - Firebase 重复单元格

标签 swift uitableview firebase firebase-realtime-database

在将客户从数据库导入到 TableView 期间,是否可以避免重复具有相同名称内容的单元格?在我的示例中,如果客户 Ben Smith 有两个具有值的 child ,我只需要一个单元格包含他的名字。

这是我的数据库结构...

enter image description here

并在表格 View 中产生结果:

enter image description here

let userID = Auth.auth().currentUser!.uid
    let usersDatabaseRef = Database.database().reference().child("usersDatabase").child(userID).child("Customers")
    usersDatabaseRef.observe(.value, with: { snapshot in
        print("there are \(snapshot.childrenCount) users")
        for child in snapshot.children {
            let childSnap = child as! DataSnapshot
            print("user: \(childSnap.key)")
            let userCustomerSnap = childSnap
            for customer in userCustomerSnap.children.allObjects as! [DataSnapshot] {
                let customerSnap = customer
                let dict = customerSnap.value as! [String: Any]
                let name = dict["Name and surname"]
                let phone = dict["Phone"]
                let company = dict["Company name"]
                let customerID = dict["ID"]
                let email = dict["Email"]
                let nip = dict["Nip1"]
                let postal = dict["Postal code"]
                let street = dict["Street"]
                let town = dict["Town"]
                let myCustomer = CustomerModel(name: name as? String, phone: phone as? String, company: company as? String, customerID: customerID as? String, email: email as? String, nip: nip as? String, postal: postal as? String, street: street as? String, town: town as? String)
                self.candies.append(myCustomer)
                self.filteredCandies.append(myCustomer)
            }
            self.tableViewCustomer.reloadData()

最佳答案

每次找到来自该客户的订单(或数据中“Ben Smith”下代表的任何级别)时,您都会将一个项目添加到列表中。因此,您的列表是订单列表,而不是客户列表。

一般来说,在 NoSQL/Firebase 中,建议根据您想要显示的内容对数据库进行建模。因此,如果您想要客户列表,我会将其存储在数据库中。但考虑到您的数据结构,您也可以在代码中修复它:

usersDatabaseRef.observe(.value, with: { snapshot in
    print("there are \(snapshot.childrenCount) users")
    for child in snapshot.children {
        let childSnap = child as! DataSnapshot
        let myCustomer = CustomerModel(name: child.key, phone: "", company: "", customerID: "", email: "", nip: "", postal: "", street: "", town: ")
        self.candies.append(myCustomer)
        self.filteredCandies.append(myCustomer)
    }

    self.tableViewCustomer.reloadData()
})

或者,仅当新客户的姓名与您之前看到的订单不同时才添加新客户:

var previousName: String = ""
usersDatabaseRef.observe(.value, with: { snapshot in
    print("there are \(snapshot.childrenCount) users")
    for child in snapshot.children {
        let childSnap = child as! DataSnapshot
        print("user: \(childSnap.key)")
        let userCustomerSnap = childSnap
        for customer in userCustomerSnap.children.allObjects as! [DataSnapshot] {
            let customerSnap = customer
            let dict = customerSnap.value as! [String: Any]
            let name = dict["Name and surname"]
            if name != previousName {
                let phone = dict["Phone"]
                let company = dict["Company name"]
                let customerID = dict["ID"]
                let email = dict["Email"]
                let nip = dict["Nip1"]
                let postal = dict["Postal code"]
                let street = dict["Street"]
                let town = dict["Town"]
                let myCustomer = CustomerModel(name: name as? String, phone: phone as? String, company: company as? String, customerID: customerID as? String, email: email as? String, nip: nip as? String, postal: postal as? String, street: street as? String, town: town as? String)
                self.candies.append(myCustomer)
                self.filteredCandies.append(myCustomer)
                previousName = name
            }
        }
    }
    self.tableViewCustomer.reloadData()

关于swift - Firebase 重复单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50467388/

相关文章:

ios - UISearchBar 未更新

ios - 将两个字符串转换为 NSDate

iphone - 从 tableView 返回单元格时出错

c# - Firebase 和 Unity?

javascript - 如何一次将一堆数据推送到firebase数据库中

Swift Radio Streaming AVPlayer

ios - 具有多行和多节的 UITableview

iOS 如何通过导航 Controller 中的“编辑”按钮自定义事件?

image - 我可以将图像作为文件而不是数据存储在 Firebase 上吗 :url?

swift - 在 for 循环中为元组赋值