arrays - 仅从 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()
}
}
解决方案
我认为这个想法是在您的 Firestore 文档中使用时间戳,并查询时间戳值大于您提取的最后一条记录的所有文档。如果需要,您可以将时间戳存储在 UserDefaults 中。
推荐阅读
- c# - datetime sql server 格式的时间输入不正确
- python - 无法验证 Outlook server.mail() 参数问题的电子邮件
- ruby - 如何在 ruby 中自动增加多个表单“xyz”
- javascript - Google 多地址验证在控制台中出现错误
- dialogflow-es - DialogFlow - 在按钮单击时调用意图
- node.js - 如何使用 TypeORM 为 postgres 数据库和 nodejs 使用参数化查询作为应用程序的后端服务器
- angular - 带有未封闭标签的 Angular HTML 绑定
- android - 阿拉伯语语音转文本
- android - 无法为给定的语言环境找到正确的 strings.xml
- vb.net - vb.net中的文本连接