如何解决为什么我的查询不限制从 firestore 中提取的文档数量?
我已经为我的 Firestore 创建了一个查询,如下所示:
const oldArray = [[ 'Veículo','Entrega\nSem/Com oco\nQtde','Entrega\nSem/Com oco\nKg','Com oco Kg\n%' ],[ 'BTT3B43','0 / 29','0 / 1.712','100\n100\n100\n ' ],[ 'EKV8922','0 / 22','0 / 1.170','100\n100\n100\n ' ]];
const newArray = oldArray.map(
lines => lines.map(childLines => childLines.replace(/\r?\n|\r/g,'|'))
);
console.log(newArray);
我的数据库如下所示:
postQuery = Firestore.firestore()
.collectionGroup("userPosts")
.order(by: "postTime",descending: false)
.limit(to: 2)
// This call to load posts does not seem to load anything
// when I step through this with the debugger I see that it does not
// change the value of postArray which should be changed in loadPosts()
loadPosts()
我如何加载数据
posts(Collection)
---{userID}(Document)
---userPosts(Collection)
{postID}(Document)
---postTime(Field)
---imageURL(Field)
我如何对数据进行分页
//queries Firestore and loads into postArray
func loadPosts() {
postQuery.getDocuments{ [weak self](querySnapshot,error) in
self!.q.async{
guard let snapshot = querySnapshot else {
print("No Posts")
return
}
var poststemp = self?.postArray
for doc in snapshot.documents{
self?.documents += [doc]
let post = self!.createPost(doc)
if(!self!.postArray.contains(post)){
poststemp?.insert(post,at: 0)
}
dispatchQueue.main.async {
self!.postArray = poststemp!
self!.tableView.reloadData()
}
}
}
}
}
然后我将文档字段加载到表视图的单元格中,其方法定义如下:
func paginate(){
postQuery = postQuery.start(afterDocument: documents.last!)
self.loadPosts()
}
但是,当我第一次加载我的应用程序时,我会看到它加载了我数据库中的所有文档,而不会将其限制为两个,并且在滚动时分页。这使我的应用程序非常缓慢并且经常耗尽内存。为什么不受限制?
更新
override func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
if postArray.count == 0{
return 1
}else{
return postArray.count
}
}
override func tableView(_ tableView: UITableView,willdisplay cell: UITableViewCell,forRowAt indexPath: IndexPath) {
// Trigger pagination when scrolled to last cell
if (indexPath.row == postArray.count - 1) {
paginate()
}
}
override func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var post: PostStruct
let cell = tableView.dequeueReusableCell(withIdentifier: K.cellIdentifier,for: indexPath) as! PostCell
cell.delegate = self
cell.imageView.image.sd_setimage(url: post.imageURL)// just an example
}
是帖子的创建时间,是格式为“2021-01-19 01:45:33 +0000”的字符串。最奇怪的是,它似乎首先加载最旧的,所以当我将降序更改为 true 时,它不会加载任何帖子。我已通读 Firebase 文档,但找不到任何导致此行为的原因。
更新 2
我想我最紧迫的问题是为什么当降序设置为 false 时我会返回帖子,但当它设置为 true 时我不会。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。