【发布时间】:2016-05-15 19:28:57
【问题描述】:
基本上,我在尝试在表格视图中更改 Firebase 的值时遇到了一些困难。我目前正在尝试制作一个类似 Facebook 帖子的功能,让人们喜欢你的帖子。但是,我不太确定我将如何进行。我想让用户能够喜欢每个帖子,然后保存以前的喜欢+给出的喜欢,并在 firebase 中更新它。截至目前,我只有显示每个帖子的代码,以及按钮(Like 按钮)中的@IBAction。
我不确定如何使用 indexPath.row(?) 仅通过表格视图访问每个特定的帖子。这是我到目前为止的代码:
后期编辑:
所以基本上我有一个表格视图,其中包含一个表格视图单元格,显示每个帖子的点赞数量。为此,我在 viewDidLoad() 中有这段代码,用于从 Firebase 获取数据:
ref.childByAppendingPath("posts").queryOrderedByChild("timeRegistered").observeEventType(FEventType.ChildAdded) { (snapshot:FDataSnapshot!) in
var dict = [String:String]()
dict["keys"] = snapshot.key as? String
dict["votes"] = snapshot.value["likes"] as? String
self.posts.append(dict)
self.tableView.reloadData()
}
顺便提一下,这段代码可以通过在 cellForRowAtIndexPath 中使用这段代码来工作:cell.textLabel!.text = String(posts[indexPath.row]["names"]!)
但是,我认为我在 viewDidLoad(.ChildAdded 函数)中使用的代码也可以与 ChildChanged 一起使用,所以这就是我想出的:
ref.childByAppendingPath("posts").queryOrderedByChild("timeRegistered").observeEventType(FEventType.ChildChanged) { (snapshot:FDataSnapshot!) in
var dict = [String:String]()
dict["keys"] = snapshot.key as? String
dict["votes"] = snapshot.value["votes"] as? String
self.posts.append(dict)
self.tableView.reloadData()
}
不幸的是,tableview 看起来只是显示新值(从 IBAction 更改的值,我也会提供此代码。) - 而旧值只是保留在那里。这是更改值的代码:
var key = posts[1]["keys"]
ref.childByAppendingPath("posts").childByAppendingPath(key!).updateChildValues(["name":"Test name"])
tableView.reloadData()
仍在尝试通过索引找出更改确切值的更好方法 - 但现在情况并非如此(因此帖子[1] [“keys”])。你似乎明白问题所在了吗?
总结一下:我想点击表格视图单元格内的按钮,并为特定帖子添加一个赞,并实时更新总数。
【问题讨论】:
-
有点不清楚你想做什么;还有,界面是什么? “投票”和“喜欢”是一回事吗?一个简单的解决方案是在每一行上添加一个小 + 按钮,当用户单击 + 时,会增加投票/喜欢。您可以通过 clickedRow 知道它是哪一行,或者可能有处理点击的自定义单元格。
-
所以基本上我想添加“喜欢”功能,你可以称之为 - 我希望它在按下“喜欢”后立即更新记录(旧喜欢+1 新喜欢)。
-
我想是的...不要把它复杂化。只需有一个响应单击 + 按钮的 IBAction。确定点击了哪一行,然后从您的帖子数组中获取当前点赞数[clickedRow],增加点赞数,然后通过该行的 firebase 键和子节点 likes.setValue(votes) 更新 Firebase 中的值。
-
@Jay 这基本上就是我想要实现的目标。但是,我正在努力更新表格视图中的值。我正在尝试使用 Firebase ChildChanged 函数更新此数据,如下所示:
ref.childByAppendingPath("names").queryOrderedByChild("timeRegistered").observeEventType(FEventType.ChildChanged) { (snapshot:FDataSnapshot!) in var dict = [String:String]() dict["keys"] = snapshot.key as? String dict["votes"] = snapshot.value["votes"] as? String self.posts.append(dict) self.tableView.reloadData() } -
@Jay 问题似乎在于,旧值仍然显示,而新值显示在新的表格视图单元格中。你知道我怎样才能避免这种情况吗?
标签: swift firebase tableview firebase-realtime-database