Что у меня есть сейчас: страница, которая отображает все, что получил пользователь. Если кто-то продолжает нажимать кнопку «Мне нравится», на этой странице будет отображаться каждый лайк. Это слишком. Я хочу сделать так, чтобы, даже если кто-то постоянно нажимал кнопку «Мне нравится», отображался только один из них. Другими словами, мне нужен способ ограничить количество лайков, отображаемых (сделанных), до 1 в день или за сеанс.
Я бродил взад и вперед, пытаясь решить, стоит ли устанавливать ограничение, когда подобноенажата или когда отображается подобное (очевидно, на разных страницах для разных пользователей).
Вот код для страницы пользователя, который видит все подобные себе.
func printPersonInfo(uid: String) {
print(uid)
let usersRef = Database.database().reference().child("people")
let thisUser = usersRef.child(uid)
thisUser.observeSingleEvent(of: .value, with: { snapshot in
let photoPosts = snapshot.childSnapshot(forPath: "PhotoPosts").value as? String ?? "No PhotoPosts"
let education = snapshot.childSnapshot(forPath: "Education").value as? String ?? "No Education"
let whatIamConsideringBuying = snapshot.childSnapshot(forPath: "WhatIamConsideringBuying").value as? String ?? "No WhatIamConsideringBuying"
print(photoPosts, education, whatIamConsideringBuying)
let p = Usery(education: education, whatIamConsideringBuying: whatIamConsideringBuying, photoPosts: photoPosts)
self.person.insert(p, at: 0)
self.table.reloadData()
Вот еще несколько нисходящих
public override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! ViewControllerTableViewCell
let immy = cell.viewWithTag(2) as! UIImageView
let person1: Usery = person[indexPath.row]
cell.lblName1.text = person1.education
cell.lblgenre1.text = person1.whatIamConsideringBuying
if let photoPosts = person1.photoPosts {
let url = URL(string: photoPosts)
immy.sd_setImage(with: url)
}
return cell
}
Это структура базы данных:
"peeps" : {
"5VbL3Adj7teM2KNJkF4GIexBJhE2" : {
"Education" : "Yale",
"PhotoPosts" : "https://firebasestorage.googleapis.com/v0/b/daylike-2f938.appspot.com/o/images%2FPhotoPosts?alt=media&token=42d76567-ac42-4728-9914-1d7c2fa4d5e6",
"WhatIamConsideringBuying" : "Twitter: Carla9",
"caption1" : {
"caption1" : 1570097725719,
"keyToPost" : "-LqG6V0RVEyFNt9Zu9CE"
},
"likes" : 565,
"peopleWhoLike" : {
"-LmLjHwwGj1kt5qLM20X" : "NMNQYJ5z64fATK2MMs7m0ggHl0k2",
"-LmLtlp5Sm900SV8xP4i" : "NMNQYJ5z64fATK2MMs7m0ggHl0k2",
Страница, на которой создается подобное, содержит функцию Pressed длякак нажата.
(ОБНОВЛЕНИЕ после ответа)
let ref = Database.database().reference()
let keyToPost = ref.child("likes").childByAutoId().key
ref.child("people").child(self.postID).observeSingleEvent(of: .value, with: {(snapshot) in
if let people = snapshot.value as? [String: AnyObject] {
let updateLikes: [String: Any] = ["peopleWhoLike/\(keyToPost)" : Auth.auth().currentUser!.uid]
ref.child("people").child(self.postID).updateChildValues(updateLikes, withCompletionBlock: { (error, reff) in
if error == nil {
ref.child("people").child(self.postID).observeSingleEvent(of: .value, with: { (snap) in
if let properties = snap.value as?[String: AnyObject]{
if let likes = properties["peopleWhoLike"] as? [String : AnyObject] {
let count = likes.count
let update = ["likes" : count]
ref.child("people").child(self.postID).updateChildValues(update)
дополнительный код
let uid = Auth.auth().currentUser!.uid
print("H", uid)
let thisUserRef = Database.database().reference().child("people").child(uid)
let myPeopleRef = thisUserRef.child("peopleWhoLike")
myPeopleRef.observeSingleEvent(of: .value, with: { snapshot in
let peopleArray = snapshot.children.allObjects as! [DataSnapshot]
for person in peopleArray {
let personUid = person.value as! String
self.printPersonInfo(uid: personUid)
}
})