首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >firebase数据库中新添加的数据在使用Swift3拉取刷新之前自行复制

firebase数据库中新添加的数据在使用Swift3拉取刷新之前自行复制
EN

Stack Overflow用户
提问于 2017-01-17 15:22:55
回答 1查看 887关注 0票数 1

为什么当我将新数据添加到firebase数据库时,在我的应用程序中出现重复,但当我下拉以使其重新刷新而不是重复时,我在项目模拟器中显示数据的屏幕截图.This就是数据在项目中的显示方式

这是我的代码。

代码语言:javascript
复制
 import UIKit
 import FirebaseDatabase
 import SDWebImage
 import FirebaseAuth


 class ViewController: UIViewController , UITableViewDataSource , UITableViewDelegate {


@IBOutlet weak var tableView: UITableView!

var Ref:FIRDatabaseReference?

var Handle:FIRDatabaseHandle?

var myarray = [Posts]()

var refresh = UIRefreshControl()

   override func viewDidLoad() {
    super.viewDidLoad()

    tableView.delegate = self
    tableView.dataSource = self

    refresh.addTarget(self, action: #selector(ViewController.loadData), for: .valueChanged)

    tableView.addSubview(refresh)


}

override func viewDidAppear(_ animated: Bool) {

    loadData()

    }



func loadData(){

    self.myarray.removeAll()

    Ref=FIRDatabase.database().reference()

    Handle = Ref?.child("Posts").queryOrdered(byChild: "Des").queryEqual(toValue: "11").observe(.childAdded ,with: { (snapshot) in

        if  let post = snapshot.value as? [String : AnyObject]{

            let img = Posts()

            img.setValuesForKeys(post)

            self.myarray.append(img)

            print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\(img)")

            self.tableView.reloadData()
        }


    })
      self.refresh.endRefreshing()

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-18 02:39:40

似乎在Firebase闭包之外调用了self.refresh.endRefreshing()。

这很糟糕,因为代码将在Firebase返回数据并重新加载tableView数据之前运行。

请记住,Firebase是异步的,internet将数据从Firebase服务器获取到您的应用程序需要时间,因此内联代码通常会在闭包中的代码之前执行。

此外,句柄在这种情况下是不需要的,除非您在其他地方使用它。

代码语言:javascript
复制
Ref?.child("Posts").queryOrdered(byChild: "Des").queryEqual(toValue: "11")
                   .observe(.childAdded ,with: { (snapshot) in
    if  let post = snapshot.value as? [String : AnyObject]{
        let img = Posts()
        img.setValuesForKeys(post)
        self.myarray.append(img)
        print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\(img)")
        self.tableView.reloadData()
    }
    self.refresh.endRefreshing()
})

此外,您可以考虑完全删除刷新,因为当您向Firebase节点(.childAdded)添加观察者时,只要它添加子节点,您的表视图就会由于闭包中执行的代码而自动刷新。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41691165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档