【问题标题】:Firebase's ref().child(pathString: String) not working as expected;returning the parent along with it's neighbours rather than the node I'm asking forFirebase 的 ref().child(pathString: String) 没有按预期工作;返回父级及其邻居而不是我要求的节点
【发布时间】:2021-09-21 02:26:26
【问题描述】:

我想获取红色的成员列表。相反,我返回了每个 Activties:

我已经尝试了很多变化,但我无法获得比这更多的精确度。 Firebase 只返回顶级对象还是我的语法关闭?

func updateActivity(activityUID: String, userUID: String) {
        var refs = Database.database().reference()
        print("Update \(activityUID) and add \(userUID) to members list")
        refs.child("Activties/\(activityUID)/members").getData { (error, snapshot) in
            if let error = error {
                print("Error getting  data \(error)")
            }
            else if snapshot.exists() {
                print("Got data \(snapshot.value!)")
                var members = snapshot.value as? [String] ?? []
                print(members)
                members.append(userUID)
                print(members)
               // self.ref.child("\(activityUID)/members").setValue(members)
            }
            else {
                print("No data available")
            }
        }
    }

【问题讨论】:

标签: ios swift firebase firebase-realtime-database


【解决方案1】:

我将我的数据库切换到 Firestore。我现在可以使用联合函数更新我的数组;修改后的ActivityModel代码:

final class ActivitiesViewModel: ObservableObject {
    var db: Firestore
    @Published var activities: [Activity] = []
    
    init() {
        print("ActivitiesViewModel.swift init called")
        db = Firestore.firestore()
        fetchActivties()
    }
    func fetchActivties() {
        db.collection("activities").addSnapshotListener {  snapshot, error    in
            guard let activityDocuments = snapshot?.documents else {
                print ("Error fetching: \(error)")
                return
            }
            self.activities = activityDocuments.compactMap { activity in
               try? activity.data(as: Activity.self)
            } ?? []
            print(self.activities)
        }
    }
    //Called when a user hits Post Activity
    func postActivity(activity: Activity) {
        print("postActivity")
        do {
            try db.collection("activities").addDocument(from: activity)
        } catch let error {
            print("Error writing activity to Firestore: \(error)")
        }
    }
    //Called when a user hits Join Activity
    func updateActivity(activityUID: String, userUID: String) {
        let ref = db.collection("activities").document(activityUID)
        ref.updateData([
            "members": FieldValue.arrayUnion([userUID])
        ])
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-12
    • 2013-09-30
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 2013-05-17
    • 2016-02-24
    相关资源
    最近更新 更多