Im fetching post data from Firestore and displaying in tableview.Im trying to implement Follow feature and after fetching data of following post data gets duplicated.
getPostData(name:String,uid:String,img:String,followingId:String) this function is used to get post data from firebase
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()
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
There is parameter name,uid,img and followingId getting from Firestore Users Collection Using this method 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
I have tried many times but my data still getting duplicates and I don't know where I'm doing wrong please can someone help me out with this issue.
Thank You