gpt4 book ai didi

ios - Firebase 实时数据库分页,一次显示 20 条记录

转载 作者:搜寻专家 更新时间:2023-11-01 06:25:18 24 4
gpt4 key购买 nike

我在 Firebase 实时数据库中有 62 条记录。我想使用 TableView (UITableView) 一次显示 20 条记录。我可以毫无问题地显示前 20 条记录。但是当用户向下滚动到底部时,表格不会显示下一组。

import UIKit
import Firebase

class ReadViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
var refInventory: DatabaseReference!
@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
super.viewDidLoad()

refInventory = Database.database().reference().child("inventory")
}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)

readData()
}

var dataObject = [DataObject]() // DataObject is an `NSObject` object with three properties (id, uuid, number).
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dataObject.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! MyTableViewCell
let object = dataObject[indexPath.row]
cell.uuidField.text = object.uuid
cell.numberField.text = String(object.number)
return cell
}

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if indexPath.row >= dataObject.count - 1 {
readMoreData()
}
}

func readData() {
let query = refInventory.queryLimited(toFirst: 20)
query.observe(DataEventType.value) { (snapshot) in
guard let first = snapshot.children.allObjects.first as? DataSnapshot else {
return
}
guard let last = snapshot.children.allObjects.last as? DataSnapshot else {
return
}
print(first.key);print(last.key)
if snapshot.childrenCount > 0 {
for items in snapshot.children.allObjects as! [DataSnapshot] {
let object = items.value as! [String: AnyObject]
let uuid = object["uuid"] as! String
let num = object["number"] as! Int
let myObject = DataObject()
myObject.uuid = uuid
myObject.number = num
self.dataObject.append(myObject)
}
self.queryKey = last.key // -LhZCF41n7Xh8g57YN29
self.tableView.reloadData()
}
}
}

var queryKey = String()
func readMoreData() {
let query = refInventory.queryLimited(toFirst: 20).queryStarting(atValue: queryKey)
query.observe(DataEventType.value) { (snapshot) in
// It stops right here //
guard let first = snapshot.children.allObjects.first as? DataSnapshot else {
return
}
guard let last = snapshot.children.allObjects.last as? DataSnapshot else {
return
}
print(first.key);print(last.key)
if snapshot.childrenCount > 0 {
for items in snapshot.children.allObjects as! [DataSnapshot] {
let object = items.value as! [String: AnyObject]
let uuid = object["uuid"] as! String
let num = object["number"] as! Int
let myObject = DataObject()
myObject.uuid = uuid
myObject.number = num
self.dataObject.append(myObject)
}
self.queryKey = last.key
self.tableView.reloadData()
}
}
}
}

下图显示部分记录,该表共有20条记录,以-LhZC4FWPCaOGtq03iho开头,以-LhZCF41n7Xh8g57YN29结尾。当用户向下滚动时,我需要显示接下来的 20 条以 LhZCF41n7Xh8g57YN2B 开头的记录。

enter image description here

那我做错了什么?我可以在此处将 queryStarting 更改为 queryEnding 或将 queryLimited(toFirst: xxx) 更改为 queryLimited(toLast: xxx) 并且那里是为了让表格加载另外 20 条记录,除了表格最终将显示完全相同的记录集。谢谢。

最佳答案

我使用下面的代码实现了同样的效果。您可以使用 queryOrderedByKey 进行排序。

代码:

ref.queryOrderedByKey().queryStarting(atValue: self.queryKey).queryLimited(toLast: 20).observeSingleEvent(of: .value, with: { snapshot in            
// Do stuff with this page of elements
})

由于最新版本的 firebase SDK,可能某些方法已弃用或不可用。我在 2017 年做到了。

谢谢

关于ios - Firebase 实时数据库分页,一次显示 20 条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56640389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com