You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

登录时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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 03:58:11