Firebase 获取集合错误地返回空结果

问题描述 投票:0回答:1

我目前正在使用 firebase 作为数据库构建一个应用程序。然而,我正在尝试获取用户的类别,尽管我可以在我的 firebase 控制台中看到该用户实际上有 3 个类别(我在注册时默认添加了它们)。

我尝试调试但无法弄清楚为什么会发生这种情况。此外,我查找了类似的问题,并在将函数调用到

.onAppear
方法时移动了代码。这些尝试都没有成功...

这是我的 Firebase 控制台: Firebase Console

获取类别代码:

func fetchCategories(forUserId userId: String, completion: @escaping (Result<[Category], Error>) -> Void) {
        
        let categoriesRef = db.collection("users").document(userId).collection("categories")
        print("user id: \(userId)")
        categoriesRef.getDocuments { (snapshot, error) in
            if let error = error {
                completion(.failure(error))
                return
            }

            guard let documents = snapshot?.documents else {
                completion(.failure(FirestoreErrorCode.notFound as! Error))
     
                return
            }

            let categories = documents.compactMap { document -> Category? in
                do {
                    return try document.data(as: Category.self)
                } catch {
                    print("Error decoding category: \(error)")
                    return nil
                }
            }

            completion(.success(categories))
        }
    }

调用函数:

.onAppear {
                FirebaseManager().fetchCategories(forUserId: Auth.auth().currentUser?.uid ?? "") { result in
                    do {
                        let categories = try result.get()
                        print("fetched categories")
                        print(categories.isEmpty ? categories : categories[0])
                        if categories.isEmpty == false {
                            firstCategory = categories[0]
                        }
                    } catch {
                        print("Error fetching categories: \(error.localizedDescription)")
                    }
                    
                }
            }

如果我需要提供任何其他信息,请直接说!

swift firebase swiftui mobile-development
1个回答
0
投票

您需要对您的对象持有强引用

@StateObject var fm = FirebaseManager()
© www.soinside.com 2019 - 2024. All rights reserved.