我正在使用具有设置限制的 firestore 数据在 tableview 中加载更多功能,同时我滚动 tableview 获取 addListener 方法调用,我检查了两次,得到重复记录。
在下面的代码中,我已经打印了我得到的快照。每次滚动时,它都会按快照 ID 及其数据打印。
仍然得到重复的数据。 firebase 控制台是否有任何其他设置?
这是我的代码,但代码中没有任何错误,它来自 firebase。
func getTasks(){
// self.tableViewData.reloadDataWithLoader(true)
let userID = HelperFunction.helper.FetchFromUserDefault(name: kUID)
let taskRef = Firestore.firestore().collection("tasks")
let query uery
if (self.snapLastkey == "") {
self.arrayTask = []
self.arrayKeys = []
self.arraySelectedTask = []
query = taskRef.whereField(kUUID, isEqualTo: userID).whereField(kIsCompleted, isEqualTo: false).limit(to: kLimit)
}else{
query = taskRef.whereField(kUUID, isEqualTo: userID).whereField(kIsCompleted, isEqualTo: false).limit(to: kLimit).start(afterDocument: self.snapLastDocument!)
}
query.addSnapshotListener { (snapshot, error) in
if(error == nil){
guard let snapshot = snapshot else {
// The query snapshot has error.
runOnMainThread {
// self.tableViewData.reloadData(withPlaceholderString: "No task found.", with: APP_BLACK_COLOR)
}
print("Error retrieving products: \(error.debugDescription)")
return
}
guard let lastSnapshot = snapshot.documents.last else {
// The collection is empty.
runOnMainThread {
self.tableViewData.reloadData(withPlaceholderString: "No task found.", with: APP_BLACK_COLOR)
if(self.snapLastkey != "") {
self.tableViewData.reloadDataWithLoader(false)
self.footerw.endRefreshingWithNoMoreData()
}
}
return
}
// self.snapLastDocument = lastSnapshot
if (self.arrayTask.count==0) {
self.arrayTask = []
self.arrayKeys = []
self.arraySelectedTask = []
}
snapshot.documentChanges.forEach({ (document) in
print("\(document.document.documentID) => \(document.document.data())")
let json = JSON(document.document.data())
self.arrayTask.append(Task.init(json: json))
self.arraySelectedTask.append(false)
self.arrayKeys.append(document.document.documentID)
self.snapLastkey = document.document.documentID as String
self.snapLastDocument = document.document
})
print("\n\n\n\n\n--------arr print---------\n\n")
for i in 0..<self.arrayTask.count
{
let task = self.arrayTask[i]
print("arr task Title:",task.title)
}
self.tableViewData.reloadData()
if(self.arrayTask.count==0){
self.snapLastkey = ""
self.tableViewData.reloadData(withPlaceholderString: "No task found.", with: APP_BLACK_COLOR)
}else{
if Int(snapshot.documents.count) < kLimit{
self.snapLastkey = ""
self.footerw.endRefreshingWithNoMoreData()
}
else{
self.footerw.endRefreshing()
}
}
print(self.arrayTask)
}else{
print(error?.localizedDescription ?? "")
self.tableViewData.reloadData(withPlaceholderString: "Try again.", with: APP_BLACK_COLOR)
}
}
}
已解决
它只是索引问题。我在日志中找到了它。所以在日志中我得到了在 firebase 索引部分创建索引的链接。我已经创建了需要的新索引,我的数据即将到来正是我想要的。
关于ios - 使用firestore(firebase云数据库)获取重复数据时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47156847/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |