更改/更新子值而不添加新子项(Firebase-swift)

时间:2017-11-27 02:36:43

标签: ios swift firebase firebase-realtime-database

我正在尝试从我的firebase数据库更新我的子值,但问题是每当我的子值增加1时,我的tableview将自动创建一个新子项。我怎样才能使它只更新子值?感谢您的帮助。

注意:请参阅图片以获得更清晰的理解

var ref: DatabaseReference?
var databaseHandle: DatabaseHandle?
var postData = [String]()
var postData2 = [String]()

class TableViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        ref = Database.database().reference() //set the firebase reference

        // Retrieve the post and listen for changes
        databaseHandle = ref?.child("Posts").observe(.childChanged, with: { (snapshot) in
            // Code to execute when a child is added under "Posts"
            let post1 = snapshot.key
            let post2 = (snapshot.value as AnyObject).description

            postData.append(post1)
            if let actualPost = post2 {
            postData2.append(actualPost)

            self.tableView.reloadData()

            }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return postData.count
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

        cell.textLabel?.text = postData[indexPath.row]
        cell.detailTextLabel?.text = postData2[indexPath.row] + " ★"
        cell.detailTextLabel?.textColor = UIColor.yellow;
        return cell
    }

}

Image

2 个答案:

答案 0 :(得分:0)

当您从列表中添加元素时,您的数据源计数会增加1,但随后会调用childAdded的firebase回调,现在您将检索从数据库添加的相同元素,从而导致重复的行。

按下红色按钮时运行的调用在您的示例中不存在,但我假设您按照这些行执行某些操作。希望它有所帮助。

答案 1 :(得分:0)

查看此帖子:Update child values in Firebase with Swift

使用此功能,您只能更新现有对象的属性值。