当用户在图片上双击时,每个帖子的点赞(心)数将会增加。我尝试了这个代码,但它不能像预期的那样工作(例如,当我双击时,它会加载一个帖子并复制不同点赞数量的帖子(例如帖子1- 1个赞,帖子1-2个赞,帖子1-3个赞).How我是否可以在不复制帖子的情况下显示更新的点赞数?(帖子1-显示X个赞的位置X=Incremental)
func loadPosts() {
let ref = Database.database().reference()
ref.child("posts").observe(.childAdded) { (snapshot: DataSnapshot) in
if let dict = snapshot.value as? [String: Any] {
guard let titleText = dict["title"] as? String else{return}
let locationDetails = dict["location"] as! String
let captionText = dict["caption"] as! String
let photoUrlString = dict["photoUrl"] as! String
let priceText = dict["price"] as! String
let categoryText = dict["category"] as! String
let usernameLabel = dict["username"] as! String
let profileImageURL = dict["pic"] as! String
let heartInt = dict["heart"] as! Int
let timestampString = dict["timestamp"] as! String
let post = Post(titleText: titleText, captionText: captionText, locationDetails: locationDetails, photoUrlString: photoUrlString, priceText: priceText,categoryText: categoryText, usernameLabel: usernameLabel, profileImageURL: profileImageURL, heartInt: heartInt, timestampString: timestampString)
//append(post) to array
self.posts.append(post)
print(self.posts)
self.collectionView.reloadData()
}
}
}
func delayCompletionHandler(completion:@escaping (() -> ())) {
let delayInSeconds = 0.5
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delayInSeconds) {
completion()
}
}
//CollectionView
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell{
cell.reloadEvents = {
self.delayCompletionHandler {
self.loadPosts()
}
}
}
要检测另一个文件中的heartTapped,请执行以下操作:
@objc func heartTapped(){
print(" I heart u")
let ref = Database.database().reference()
heartInt1 += 1
ref.child("posts").child(timestamp).observeSingleEvent(of: .value, with: { (snapshot) in
if let dic = snapshot.value as? [String : AnyObject]{
var heartString = dic["heart"] as! Int
heartString += 1
ref.child("posts").child(self.timestamp).updateChildValues(["heart" : heartString])
}
})
reloadEvents?()
}
}
发布于 2018-06-27 20:19:09
我真傻,我应该在解析的loadPosts()中添加self.posts.removeAll()。
发布于 2018-06-28 02:32:27
你的解决方案是糟糕的实践。当你处理数据库时,你必须从规模上考虑,如果Kim Kardashian每秒都能得到一颗心,使用你的应用程序,那么会发生什么,加载和删除每颗心的所有东西?这听起来很有效吗?
您需要找到一种方法,只加载心形的数量,而不是所有的,以便获得心形的数量。
一种解决方案是添加一个额外的子ref.child("hearts")
,然后拥有一个loadHearts()
,其中您将只获得心脏的数量。
https://stackoverflow.com/questions/51070511
复制相似问题