ニュースフィードを作成すると、ユーザーは投稿を好きにするか嫌いにするかを選択できます。このイベントが発生すると、同様のイメージの色がそれに応じて変化します。コードが正しく、バックエンドデータがすべて動作しています(IE:好き嫌いの値が正しく更新されます)。問題は、私がポストを好きまたは嫌いにすると、他のすべての嫌いな画像が色が変わって、対応する画像が正しく表示されないということです。ここでをとcellforrowat tableviewcell内部コードである:TableViewCellsは、Firebaseデータに基づいて正しいイメージを読み込んでいません。
TableViewCell同様
func likeTapped(sender: UITapGestureRecognizer) {
FriendSystem.system.loadUserFriends(post.userID)
if FriendSystem.system.USER_REF.child(post.userID).key == FriendSystem.system.CURRENT_USER_ID {
return
} else {
likesRef.observeSingleEvent(of: .value, with: { (snapshot) in
if let _ = snapshot.value as? NSNull {
self.dislikeRef.observeSingleEvent(of: .value, with: {(snapshot) in
if let _ = snapshot.value as? NSNull {
self.likesImage.image = UIImage(named: "trending_fire")
self.dislikeImage.image = UIImage(named: "upsidedownGrayFire")
self.currentUser.adjustScore(addScore: true)
FriendSystem.system.postUsersFriends.forEach({ (key) in
self.post.adjustUserLikes(key: key, addLike: true)
})
self.likesRef.setValue(true)
} else {
self.likesImage.image = UIImage(named: "gray_fire")
self.dislikeImage.image = UIImage(named: "upsidedownGrayFire")
self.currentUser.adjustScore(addScore: true)
FriendSystem.system.postUsersFriends.forEach({ (key) in
self.post.adjustUserLikes(key: key, addLike: true)
})
self.dislikeRef.removeValue()
}
})
} else {
self.likesImage.image = UIImage(named: "gray_fire") // Change the image
self.dislikeImage.image = UIImage(named: "upsidedownGrayFire")
self.currentUser.adjustScore(addScore: false)
FriendSystem.system.postUsersFriends.forEach({ (key) in
self.post.adjustUserLikes(key: key, addLike: false) // Remove the like
})
self.likesRef.removeValue() // removes the value to false in the DB
}
})
}
}
CellForRowAtの場合に
func configureCell(post: Post) {
self.post = post
likesRef = FriendSystem.system.CURRENT_USER_LIKES_REF.child(self.post.postID)
dislikeRef = FriendSystem.system.CURRENT_USER_DISLIKES_REF.child(self.post.postID)
FriendSystem.system.CURRENT_USER_LIKES_REF.child(post.postID).observeSingleEvent(of: DataEventType.value, with: { (snapshot) in
if let _ = snapshot.value as? NSNull{
self.likesImage.image = #imageLiteral(resourceName: "gray_fire")
} else {
self.likesImage.image = #imageLiteral(resourceName: "trending_fire")
}
})
FriendSystem.system.CURRENT_USER_DISLIKES_REF.child(post.postID).observeSingleEvent(of: DataEventType.value, with: { (snapshot) in
if let _ = snapshot.value as? NSNull {
self.dislikeImage.image = #imageLiteral(resourceName: "upsidedownGrayFire")
} else {
self.dislikeImage.image = #imageLiteral(resourceName: "blueFire")
}
})
}
は
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let post = FriendSystem.system.friendPosts[indexPath.row]
if let cell = tableView.dequeueReusableCell(withIdentifier: "postCell") as? FriendPostCell {
cell.configureCell(post: post)
cell.transform = CGAffineTransform(scaleX: 1, y: -1)
cell.delegate = self
return cell
}
return UITableViewCell()
}
私は約1週間これに固執しており、概念を一括して削除することを検討しています。どんな助けもありがとう。また、余分な、または欠落しているクロージャがある場合は、問題を示すために実際のコードを編集したためです。
これが参考になると思います。 https://stackoverflow.com/questions/42916316/uitableview-cell-is-displaying-an-incorrect-image-even-while-setting-the-image –