首页 > 解决方案 > 仅从 Firestore 集合中加载新数据

问题描述

我有一个 tableViewController 并从 Firestore 获取数据,我在这个 tableView 中有一个 refreshController 我想要从 Firestore 重新加载新数据,如果 Firestore 中有新数据并且用户刷新我想检索的 tableView新数据(仅)不是所有数据。我尝试使用 reloadData() 但它重新加载所有数据并将其再次添加到 tableView

这是我的代码

import UIKit
import FirebaseFirestore
import Firebase
import FirebaseAuth
import UserNotifications


class TableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {


@IBOutlet var tableView: UITableView!
   


var db: Firestore!
var street = [String]()
var firstName = [String]()
var lastName = [String]()
var blockNumber = [String]()
var phone = [String]()
var reciept = [String]()
var houseNumber = [String]()
var price = [String]()
var amount = [String]()
var block = [String]()
var Area = [String]()
var names = [String]()
var refreshControl = UIRefreshControl()

override func viewDidLoad() {
    super.viewDidLoad()
    
    

    refreshControl.attributedTitle = NSAttributedString(string: "")
      refreshControl.addTarget(self, action: #selector(self.refresh(_:)), for: .valueChanged)
      tableView.addSubview(refreshControl) // not required when using UITableViewController

    
    tableView.register(UINib(nibName: "TableViewCell", bundle: nil) , forCellReuseIdentifier: "Cell")
    
    tableView.separatorStyle = .none
    tableView.dataSource = self
    tableView.delegate = self
    
    db = Firestore.firestore()
    self.navigationItem.setHidesBackButton(true, animated: true)
    

    NotificationCenter.default.addObserver(self, selector: #selector(setter: tableView), name: NSNotification.Name(rawValue: "notificationName"), object: nil)
    

}


   @objc func refresh(_ sender: AnyObject) {
      tableView.reloadData()
      refreshControl.endRefreshing()

     
  }



func loadData1() {
   
    
    Firestore.firestore().collection("hola").getDocuments() { [self]
            
            (querySnapshot, err) in
            
            if let err = err
            
            {
                print("Error getting documents: \(err)");
            }
            else
            {
                
                var count = 0
                for document in querySnapshot!.documents {
                    count += 1
                    print("\(document.documentID) => \(document.data())");
                    
                    self.firstName.append(document.get("firstname") as? String ?? "")
                    self.lastName.append(document.get("lastname") as? String ?? "")
                    self.street.append(document.get("street") as? String ?? "")
                    self.blockNumber.append(document.get("blockNumber") as? String ?? "")
                    self.Area.append(document.get("area") as? String ?? "")
                    self.phone.append(document.get("phone") as? String ?? "")
                    self.reciept.append(document.get("reciept") as? String ?? "")
                    self.houseNumber.append(document.get("houseNumber") as? String ?? "")
                    self.price.append(document.get("total price") as? String ?? "")
                    self.amount.append(document.get("amount") as? String ?? "")
                    
                }
             
                
            }
            
             self.tableView.reloadData()
            
        }
        
        
  } 

标签: arraysswiftfirebaseuitableviewgoogle-cloud-firestore

解决方案


我认为这个想法是在您的 Firestore 文档中使用时间戳,并查询时间戳值大于您提取的最后一条记录的所有文档。如果需要,您可以将时间戳存储在 UserDefaults 中。


推荐阅读