【问题标题】:How to remove duplicates data from tableviewcell?如何从 tableviewcell 中删除重复数据?
【发布时间】:2022-01-21 20:10:25
【问题描述】:

我正在从 Firestore 获取帖子数据并在 tableview 中显示。我正在尝试实现关注功能,并且在获取以下帖子数据的数据后会重复。

getPostData(name:String,uid:String,img:String,followingId:String)该函数用于从firebase获取post数据

var postArray = [postData]()

    func getPostData(name:String,uid:String,img:String,followingId:String) {
        FirebaseReference(.Post).getDocuments{(snapshot, error) in
            if error != nil {
                print("Document Error: ", error!)
            } else {
                if let doc = snapshot, doc.isEmpty == false {
                    print("Post Document is present.")
                    let desc = doc.documents
                    let dateFormatter = DateFormatter()
                    dateFormatter.dateFormat = "dd/MM/yyyy hh:mm:ss a"
                    self.postArray.removeAll()
                    for item in desc
                    {
                        let post = item.data()
                        let puid = item.documentID
                        
                        let title = post["title"] as! String
                        let audioDuration = post["audioDuration"] as! String
                        let audioUrl = post["audioUrl"] as! String
                        let date = post["date"] as! String
                        let postId = post["postId"] as! String
                        let userId = post["userId"] as! String
                        let emoji = post["emoji"] ?? ""
                        let feeling = post["feeling"] ?? ""
                        
                        FirebaseReference(.Post).document(puid).collection("Like").getDocuments{(snapshot1,error) in
                            if error != nil {
                                print("Document Error: ", error!)
                            } else {
                                
                                if let doc1 = snapshot1, doc1.isEmpty == false
                                {
                                    let likecount = snapshot1?.count ?? 0
                                    let desc1 = doc1.documents
                                    var likeByUserId : String?
                                    var likeId : String?
                                    
                                    for item in desc1 {
                                        likeByUserId = item["likedCommentToUserId"] as? String
                                        likeId = item["likeCommentByUserId"] as? String
                                    }
                                    
                                    FirebaseReference(.Post).document(puid).collection("Comment").getDocuments{(snapshot2,error) in
                                        if error != nil {
                                            print("Document Error: ", error!)
                                        } else {
                                            
                                            if let doc2 = snapshot2, doc2.isEmpty == false
                                            {
                                                let commentCount = snapshot2?.count ?? 0
                                              
                                                FirebaseReference(.Post).document(puid).collection("Report").getDocuments{(snapshot3,error) in
                                                    
                                                    if error != nil {
                                                        print("Document Error: ", error!)
                                                    } else {
                                                        
                                                        if let doc3 = snapshot3, doc3.isEmpty == false
                                                        {
                                                            let reportCount = snapshot3?.count ?? 0
                                                            let desc2 = doc3.documents
                                                            
                                                            var reportByUserId : String?
                                                            
                                                            for item in desc2 {
                                                                reportByUserId = item["userId"] as? String
                                                            }
                                                            
                                                            if userId == uid
                                                            {
                                                                
                                                                let object = postData(audioDuration: audioDuration, audioUrl: audioUrl, date: date, postId: postId, title: title, userId: userId, name: name, emoji: emoji as? String, feeling: feeling as? String, likecount: likecount, commentCount: commentCount, reportCount: reportCount, img: img, likedByUserId:likeByUserId, likedId: likeId, reportByUserId: reportByUserId,followingId: followingId)
                                                                self.postArray.append(object)
                                                                self.postArray.sort(by: { dateFormatter.date(from:$0.date ?? "")?.compare(dateFormatter.date(from:$1.date ?? "")!) == .orderedDescending })
                                                                self.voicebookTableView.reloadData()
                                                                
                                                            }
                                                        }
                                                        else
                                                        {
                                                            
                                                            if userId == uid
                                                            {
                                                                
                                                                let object = postData(audioDuration: audioDuration, audioUrl: audioUrl, date: date, postId: postId, title: title, userId: userId, name: name, emoji: emoji as? String, feeling: feeling as? String, likecount: likecount, commentCount: commentCount,reportCount: 0, img: img, likedByUserId:likeByUserId, likedId: likeId, reportByUserId: "NA",followingId: followingId)
                                                                self.postArray.append(object)
                                                                self.postArray.sort(by: { dateFormatter.date(from:$0.date ?? "")?.compare(dateFormatter.date(from:$1.date ?? "")!) == .orderedDescending })
                                                                self.voicebookTableView.reloadData()
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                            else
                                            {
                                                FirebaseReference(.Post).document(puid).collection("Report").getDocuments{(snapshot3,error) in
                                                    
                                                    if error != nil {
                                                        print("Document Error: ", error!)
                                                    } else {
                                                        
                                                        if let doc3 = snapshot3, doc3.isEmpty == false
                                                        {
                                                            let reportCount = snapshot3?.count ?? 0
                                                            let desc2 = doc3.documents
                                                            
                                                            var reportByUserId : String?
                                                            
                                                            for item in desc2 {
                                                                reportByUserId = item["userId"] as? String
                                                            }
                                                            
                                                            if userId == uid
                                                            {
                                                                
                                                                let object = postData(audioDuration: audioDuration, audioUrl: audioUrl, date: date, postId: postId, title: title, userId: userId, name: name, emoji: emoji as? String, feeling: feeling as? String, likecount: likecount, commentCount: 0,reportCount: reportCount, img: img, likedByUserId: likeByUserId, likedId: likeId, reportByUserId: reportByUserId,followingId: followingId)
                                                                self.postArray.append(object)
                                                                self.postArray.sort(by: { dateFormatter.date(from:$0.date ?? "")?.compare(dateFormatter.date(from:$1.date ?? "")!) == .orderedDescending })
                                                                self.voicebookTableView.reloadData()
                                                            }
                                                        }
                                                        else
                                                        {
                                                            if userId == uid
                                                            {
                                                                
                                                                let object = postData(audioDuration: audioDuration, audioUrl: audioUrl, date: date, postId: postId, title: title, userId: userId, name: name, emoji: emoji as? String, feeling: feeling as? String, likecount: likecount, commentCount: 0,reportCount: 0, img: img, likedByUserId: likeByUserId, likedId: likeId, reportByUserId: "NA",followingId: followingId)
                                                                self.postArray.append(object)
                                                                self.postArray.sort(by: { dateFormatter.date(from:$0.date ?? "")?.compare(dateFormatter.date(from:$1.date ?? "")!) == .orderedDescending })
                                                                self.voicebookTableView.reloadData()
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                   
                                    FirebaseReference(.Post).document(puid).collection("Comment").getDocuments{(snapshot,error) in
                                        if error != nil {
                                            print("Document Error: ", error!)
                                        } else {
                                            
                                            if let doc2 = snapshot, doc2.isEmpty == false
                                            {
                                                let commentCount = snapshot?.count ?? 0
                                                
                                                FirebaseReference(.Post).document(puid).collection("Report").getDocuments{(snapshot3,error) in
                                                    
                                                    if error != nil {
                                                        print("Document Error: ", error!)
                                                    } else {
                                                        
                                                        if let doc3 = snapshot3, doc3.isEmpty == false
                                                        {
                                                            let reportCount = snapshot3?.count ?? 0
                                                            let desc2 = doc3.documents
                                                            
                                                            var reportByUserId : String?
                                                            
                                                            for item in desc2 {
                                                                reportByUserId = item["userId"] as? String
                                                            }
                                                            
                                                            if userId == uid
                                                            {
                                                                let object = postData(audioDuration: audioDuration, audioUrl: audioUrl, date: date, postId: postId, title: title, userId: userId, name: name, emoji: emoji as? String, feeling: feeling as? String, likecount: 0, commentCount: commentCount,reportCount: reportCount, img: img, likedByUserId: "NA", likedId: "NA", reportByUserId: reportByUserId,followingId: followingId)
                                                                self.postArray.append(object)
                                                                self.postArray.sort(by: { dateFormatter.date(from:$0.date ?? "")?.compare(dateFormatter.date(from:$1.date ?? "")!) == .orderedDescending })
                                                                self.voicebookTableView.reloadData()
                                                            }
                                                        }
                                                        else
                                                        {
                                                           
                                                            if userId == uid
                                                            {
                                                                let object = postData(audioDuration: audioDuration, audioUrl: audioUrl, date: date, postId: postId, title: title, userId: userId, name: name, emoji: emoji as? String, feeling: feeling as? String, likecount: 0, commentCount: commentCount,reportCount: 0, img: img, likedByUserId: "NA", likedId: "NA", reportByUserId: "NA",followingId: followingId)
                                                                self.postArray.append(object)
                                                                self.postArray.sort(by: { dateFormatter.date(from:$0.date ?? "")?.compare(dateFormatter.date(from:$1.date ?? "")!) == .orderedDescending })
                                                                self.voicebookTableView.reloadData()
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                            else
                                            {
                                                FirebaseReference(.Post).document(puid).collection("Report").getDocuments{(snapshot3,error) in
                                                    
                                                    if error != nil {
                                                        print("Document Error: ", error!)
                                                    } else {
                                                        
                                                        if let doc3 = snapshot3, doc3.isEmpty == false
                                                        {
                                                            let reportCount = snapshot3?.count ?? 0
                                                            let desc2 = doc3.documents
                                                           
                                                            var reportByUserId : String?
                                                           
                                                            for item in desc2 {
                                                                reportByUserId = item["userId"] as? String
                                                            }
                                                            
                                                            if userId == uid
                                                            {
                                                                let object = postData(audioDuration: audioDuration, audioUrl: audioUrl, date: date, postId: postId, title: title, userId: userId, name: name, emoji: emoji as? String, feeling: feeling as? String, likecount: 0, commentCount: 0,reportCount: reportCount, img: img, likedByUserId: "NA", likedId: "NA", reportByUserId: reportByUserId,followingId: followingId)
                                                                self.postArray.append(object)
                                                                self.postArray.sort(by: { dateFormatter.date(from:$0.date ?? "")?.compare(dateFormatter.date(from:$1.date ?? "")!) == .orderedDescending })
                                                                self.voicebookTableView.reloadData()
                                                            }
                                                        }
                                                        else
                                                        {
                                                            
                                                            if userId == uid
                                                            {
                                                                let object = postData(audioDuration: audioDuration, audioUrl: audioUrl, date: date, postId: postId, title: title, userId: userId, name: name, emoji: emoji as? String, feeling: feeling as? String, likecount: 0, commentCount: 0,reportCount: 0, img: img, likedByUserId: "NA", likedId: "NA", reportByUserId: "NA",followingId: followingId)
                                                                self.postArray.append(object)
                                                            
                                                                self.postArray.sort(by: { dateFormatter.date(from:$0.date ?? "")?.compare(dateFormatter.date(from:$1.date ?? "")!) == .orderedDescending })
                                                                self.voicebookTableView.reloadData()
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

有从Firestore用户集合获取的参数名称、uid、img和followingId 使用此方法 getUsersDataFromFirebase()

func getUsersDataFromFirebase()
    {
        FirebaseReference(.Users).getDocuments{(snapshot, error) in
            if error != nil {
                print("Document Error: ", error!)
            } else {
                if let doc = snapshot, doc.isEmpty == false {
                    print("User Document is present.")
                    let desc = doc.documents
                    self.postArray.removeAll()
                    for item in desc
                    {
                        let user = item.data()
                        let name = user["name"] as! String
                        let uid = user["userID"] as! String
                        let img = user["imgUrl"] as? String
                        let date = user["date"] as! String
                        let gender = user["gender"] as? String
                        let location = user["location"] as! String
                        
                        FirebaseReference(.Users).document(FUser.currentUser()?.userID ?? "").collection("Following").getDocuments{(snapshot1,error) in
                            if error != nil {
                                print("Document Error: ", error!)
                            } else {
                                if let doc1 = snapshot1, doc1.isEmpty == false {
                                    let data = doc1.documents
                                    
                                    var followingid = ""
                                    self.postArray.removeAll()
                                    for newitem in data
                                    {
                                        let value = newitem.data()
                                        followingid = value["followedToUserId"] as? String ?? ""
                                        self.getPostData(name: name, uid: uid, img: img ?? "",followingId: followingid )
                                    }
                                }
                                else
                                {
                                    self.getPostData(name: name, uid: uid, img: img ?? "",followingId:"NA")
                                }
                            }
                        }
                        
                        if uid == FUser.currentUser()?.userID
                        {
                            let user1 = FUser(date: date, gender: gender ?? "",imgUrl: img ?? "",location: location, name: name, status: true, userID:"\(Auth.auth().currentUser?.uid ?? "")")
                            user1.saveUserLocally()
                            
                            let pimg = URL(string: img ?? "")
                            self.profileImage.sd_setImage(with: pimg, placeholderImage: UIImage(named: "demouser.png"))
                        }
                    }
                }
                else
                {
                    print("User Document is not present.")
                }
            }
        }
    }

Im getting output like in image

我已经尝试了很多次,但我的数据仍然重复,我不知道我在哪里做错了请有人帮我解决这个问题。

谢谢

【问题讨论】:

  • 我已经尝试过了,但它不起作用
  • @AryanVishwakarma 你用 Set 试过了吗?如果您尝试过但仍然面临问题,那么数组中的每个对象都是不同的。即对象的任何属性都与其他属性不同
  • 我使用 struct 和 Set 不起作用,我应该在哪里写 Set 因为我在不同的不同条件下附加数据@Rahul Phate

标签: ios arrays swift uitableview google-cloud-firestore


【解决方案1】:

解决办法是不断初始化。

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
       
        let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: self.cellIdentifier, for: indexPath)
        var cellText : String = ""
        if appDelegate.codeList.count == 0 {
            
            return cell
            
        }
      
        if indexPath.section == 0 {
            if indexPath.row < appDelegate.codeList.count {
                cellText = appDelegate.codeList[indexPath.row]
                cell.textLabel?.textAlignment = .center
                cell.textLabel?.textColor = .black
            }
            
        }
        
        cell.textLabel?.text = cellText
        
        return cell
    }

【讨论】:

    猜你喜欢
    • 2013-04-12
    • 2021-05-01
    • 2016-09-04
    • 2022-01-19
    • 2019-07-28
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多