【发布时间】:2018-01-11 13:22:13
【问题描述】:
我不确定如何正确描述我的问题,但这是出了什么问题。
所以我有一个 TableView 填充了用户上传的posts,但我知道我想让我的用户能够评论彼此的帖子,当他们点击一个帖子时,他们会看到一个新的 ViewController,其中包含仅来自他们点击的帖子的数据。我已经做到了,所以这不是问题。但问题是,当他们单击 indexPath 时,它总是被单击的索引相同。例如,如果有 3 个帖子,名称为 test 1、test 2 和 test 3,那么他们点击的帖子始终是最新发布的帖子,因此在这种情况下,它始终是 test 3,即呈现。那么新的 viewController 是如何呈现的呢?所有posts 都通过FirebaseDatabase 生成的自动生成ID 上传和存储。
所以我使用此代码获取 AutoGenerated Id 并将其传递给全局变量并将其传递给 DetailViewController:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let post = posts[indexPath.row]
performSegue(withIdentifier: "CommentSegue", sender: post)
Database.database().reference().child("posts").observe( .value) { (snapshot) in
for child in snapshot.children {
let snap = child as! DataSnapshot
let key = snap.key
postsKey = key
}
}
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "CommentSegue"{
let commentVC = segue.destination as! CommentViewController
commentVC.post = (sender as? NSDictionary?)!
}
}
我正在使用这种方法来删除帖子,它工作得很好,但这只是不是,所以我尝试发送数据的方式可能有问题,或者我附加的帖子是错误的到帖子数组的方式。
在 CommentViewController 中看起来像这样:
import UIKit
import FirebaseDatabase
import FirebaseStorage
import FirebaseAuth
import FirebaseCore
import Firebase
class CommentViewController: UIViewController {
var post: NSDictionary?
// var comments: [NSDictionary] = []
let postKey = postsKey
@IBOutlet weak var titeLabel: UILabel!
override func viewDidAppear(_ animated: Bool) {
loadData()
}
func loadData() {
print(postKey)
Database.database().reference().child("posts").child(postKey).observeSingleEvent(of: .value) { (snapshot) in
if let dict = snapshot.value as? [String: AnyObject] {
self.titeLabel.text = dict["title"] as? String
}
}
}
感谢您的宝贵时间。
【问题讨论】:
标签: ios arrays swift firebase firebase-realtime-database