【发布时间】:2017-02-12 13:14:37
【问题描述】:
我正在使用 Firebase 实时数据库在 tableView 中显示帖子。当用户双击相应的单元格时,我想增加特定帖子的点赞数。
我的双击工作正常,并且已经打印出正确的indexPath。
override func viewDidLoad() {
super.viewDidLoad()
// double tap
let doubleTapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleDoubleTap(sender:)))
doubleTapGestureRecognizer.numberOfTapsRequired = 2
postTableView.addGestureRecognizer(doubleTapGestureRecognizer)
}
这是我根据 Firebase 文档尝试更新喜欢的内容:
func handleDoubleTap(sender: UITapGestureRecognizer) {
let touchPoint = sender.location(in: postTableView)
if let indexPath = postTableView.indexPathForRow(at: touchPoint) {
print(indexPath)
let post = posts[indexPath.row]
let oldLikes = post.likes
let newLikes = oldLikes! + 1
let postUpdates = ["\(post.likes)": newLikes]
database.updateChildValues(postUpdates)
postTableView.reloadData()
}
}
它不会抛出任何错误但不工作。
这是数据库结构:
这是我声明数据库的方式:
struct post {
let author : String!
let creationDateTime : String!
let content : String!
let likes : Int!
}
在viewDidLoad
let database = FIRDatabase.database().reference()
这就是我创建帖子的方式:
@IBAction func savePost(_ segue:UIStoryboardSegue) {
let addPostVC = segue.source as! AddPostViewController
let author = currentUser.displayName
let date = Date()
let formatter = DateFormatter()
formatter.dateFormat = "dd.MM.yyyy"
let dateResult = formatter.string(from: date)
let creationDateTime = "\(dateResult)"
let content = addPostVC.passTextContent
let likes = 0
let post : [String : AnyObject] = ["author" : author as AnyObject,
"content" : content as AnyObject,
"creationDateTime" : creationDateTime as AnyObject,
"likes" : likes as AnyObject]
database.child("Posts").childByAutoId().setValue(post)
}
这就是我在viewDidLoad中检索数据的方式
database.child("Posts").queryOrderedByKey().observe(.childAdded, with: {
snapshot in
let postID = (snapshot.value as? NSDictionary)?["postID"] as? String ?? ""
let author = (snapshot.value as? NSDictionary)?["author"] as? String ?? ""
let content = (snapshot.value as? NSDictionary)?["content"] as? String ?? ""
let creationDateTime = (snapshot.value as? NSDictionary)?["creationDateTime"] as? String ?? ""
let likes = (snapshot.value as? NSDictionary)?["likes"] as? Int ?? 0
self.posts.insert(post(postID: postID, author: author, creationDateTime: creationDateTime, content: content, likes: likes), at: 0)
self.postTableView.reloadData()
})
【问题讨论】:
-
双击后,
post.likes的 firebase 数据库中是否有任何更新? -
不,什么都没有发生
-
好的,你能展示你的数据库结构吗?你如何声明变量
database?我的意思是,请将其添加到您的问题中 -
当然,做到了。
标签: ios swift firebase firebase-realtime-database