登录时Firebase加载数据返回空快照,重载后恢复正常
视图加载时Firebase查询返回空快照,重载按钮调用同一函数却正常
应用登录后,viewDidLoad中调用downloadInitialUsers()从Firebase查询数据时返回空快照,但点击重载按钮调用同一函数却能获取正确结果。
相关代码
viewDidLoad 方法
override func viewDidLoad() { print("did load") super.viewDidLoad() emptyDataView.delegate = self downloadInitialUsers() setup() }
downloadInitialUsers 方法
private func downloadInitialUsers() { ProgressHUD.show() FirebaseListener.shared.downloadUsersFromFirebase(isInitialLoad: isInitialLoad, limit: initialLoadNumber, lastDocumentSnapshot: lastDocumentSnapshot) { (allUsers, snapshot) in if allUsers.count == 0 { ProgressHUD.dismiss() } self.lastDocumentSnapshot = snapshot self.isInitialLoad = false self.initialCardModels = [] self.userObjects = allUsers let allUsersShuffle = allUsers.shuffled() for user in allUsersShuffle { print(user) user.getUserAvatarFromFirestore { (didSet) in let cardModel = UserCardModel(id: user.objectId, name: user.username) self.initialCardModels.append(cardModel) self.numberOfCardsChecked += 1 if self.numberOfCardsChecked == allUsers.count { DispatchQueue.main.async { ProgressHUD.dismiss() self.layoutCardStackView() } } } } print("initial \(allUsers.count) received") self.downloadMoreUsersInBackground() } }
downloadUsersFromFirebase 方法
func downloadUsersFromFirebase(isInitialLoad: Bool, limit: Int, lastDocumentSnapshot: DocumentSnapshot?, completion: @escaping (_ users: [FUser], _ snapshot: DocumentSnapshot?) ->Void) { var query: Query! var users: [FUser] = [] let user = Auth.auth().currentUser!.uid if isInitialLoad { query = FirebaseReference(.User).whereField(kTYPE, isEqualTo: "female").limit(to: limit) print("first \(limit) users loading") } else { if lastDocumentSnapshot != nil { query = FirebaseReference(.User).whereField(kTYPE, isEqualTo: "female").limit(to: limit).start(afterDocument: lastDocumentSnapshot!) print("next \(limit) user loading") } else { print("last snapshot is nil") } } if query != nil { guard let snapshot = snapShot else { return } if !snapshot.isEmpty { for userData in snapshot.documents { let userObject = userData.data() as NSDictionary users.append(FUser(_dictionary: userObject)) } users.shuffle() completion(users, snapshot.documents.last!) } else { print("no more users to fetch") users.shuffle() completion(users, nil) } } else { users.shuffle() completion(users, nil) } }
didClickReloadButton 方法
func didClickReloadButton() { let currentUser = FUser.currentUser() currentUser?.seenIdArray = [] saveUserData(user: currentUser!) resetLoadCount() downloadInitialUsers() emptyDataView.reloadButton.isEnabled = false }
已尝试的排查步骤
- 尝试捕获查询中的错误,但未发现错误
- 修改查询为加载所有用户,问题仍然存在
内容的提问来源于stack exchange,提问作者Dani
相关产品推荐
相关产品推荐

