问题描述
我已经为我的 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 (将#修改为@)