当前位置: 首页 > 面试题库 >

Swift嵌套查询中的Firebase无法正常工作

鲁浩渺
2023-03-14
问题内容

我有一个如下的JSON结构:

{
  "groups" : {
    "-KAv867tzVgIghmr15CM" : {
      "author" : "ruben",
      "name" : "Item A"
    },
    "-KAv87nqLEG1Jtc04Ebn" : {
      "author" : "ruben",
      "name" : "Item B"
    },
    "-KAv88yZe8KTfkjAE7In" : {
      "author" : "ruben",
      "name" : "Item C"
    }
  },
  "users" : {
    "rsenov : {
      "avatar" : "guest",
      "email" : "ruben@ruben.com",
      "groups" : {
        "-KAv867tzVgIghmr15CM" : "true",
        "-KAv87nqLEG1Jtc04Ebn" : "true",
        "-KAv88yZe8KTfkjAE7In" : "true"
      }
    }
  }
}

每个用户都有一个带有childByAutoId()键的元素“组”。然后,我有该应用程序中存在的所有组的列表。

每次运行该应用程序时,我都会获取当前用户登录的URL参考,并获取该用户的组列表(在这种情况下,登录的用户是具有3个组的“
rsenov”)。对于该用户所属的每个组,我都会遍历组url参考,以查找该3个组的信息。

我这样做是这样的:

func loadTable() {
    self.groups = []
    var counter = 0
    self.meses = []
    var tempItems = [String]()

    DataService.dataService.CURRENT_USER_GROUPS_REF.observeEventType(.Value, withBlock: { snapshot in

        if let snapshots = snapshot.children.allObjects as? [FDataSnapshot] {
            tempItems = []
            for snap in snapshots {

                DataService.dataService.GROUPS_REF.childByAppendingPath(snap.key).queryOrderedByChild("name").observeEventType(.Value, withBlock: { snapshot in
                    if let postDictionary = snapshot.value as? Dictionary<String, AnyObject> {
                        tempItems.append(snapshot.value.objectForKey("name") as! String)
                        let key = snapshot.key
                        let group = Group(key: key, dictionary: postDictionary)
                        self.groups.insert(group, atIndex: 0)

                    }
                    counter++
                    if (counter == snapshots.count) {
                        self.meses = tempItems
                        self.miTabla.reloadData()

                    }
                })
            }
        }
    })
}

我认为以这种方式进行迭代不是一个好主意。例如,如果GROUPS_REF网址中的某些子项发生更改,则该代码仅在该嵌套代码中运行,并且由于它没有从for循环中获取的“
snap.key”值,因此该代码不起作用。

在这种情况下,哪种方法是进行良好查询的最佳方法?


问题答案:

ew,这花了一些时间写。主要是因为我不太喜欢iOS / Swift:

let ref = Firebase(url: "https://stackoverflow.firebaseio.com/35514497")
let CURRENT_USER_GROUPS_REF = ref.childByAppendingPath("users/rsenov/groups")
let GROUPS_REF = ref.childByAppendingPath("groups")

var counter: UInt = 0
var groupNames = [String]()

CURRENT_USER_GROUPS_REF.observeEventType(.Value, withBlock: { groupKeys in
    for groupKey in groupKeys.children {
        print("Loading group \(groupKey.key)")
        GROUPS_REF.childByAppendingPath(groupKey.key).observeSingleEventOfType(.Value, withBlock: { snapshot in
            print(snapshot.value)
            if (snapshot.childSnapshotForPath("name").exists()) {
                groupNames.append(snapshot.value.objectForKey("name") as! String)
            }
            counter++
            if (counter == groupKeys.childrenCount) {
                print(groupNames)
            }
        })
    }
})

顺便说一句,这就是您创建最小的,完整的可验证示例的方式。该代码没有外部依赖性(例如GroupDataService在您的代码中),仅包含与答案有关的内容。

重要的位:

  • 我曾经observeSingleEventOfType获得每个组,因为如果组发生更改,我不想获得更多的回调
  • snapshot.childSnapshotForPath("name").exists()经常检查您的小组是否有名字。您可能想要确保它们都具有名称,或者将它们与真实应用程序中的其他属性一起添加到列表中。


 类似资料:
  • 在firebase中给定下面的数据结构,我想运行一个查询来检索博客'EFG'。我现在不知道用户id。

  • 问题内容: 我想使用ES进行图书搜索。因此,我决定将作者姓名和标题(作为嵌套文档)放入索引,如下所示: 我不明白的是:如何构造搜索查询,以便在搜索“一二”时仅找到第二本书,而在搜索“二三”时什么也找不到,而在搜索“一”时所有图书呢? 问题答案: 也许是这样的? 该查询基本上说一个文件必须有and 。您可以轻松地重新配置该查询。例如,如果您只想搜索作者,请删除嵌套部分。如果您想要另一本书,请更改嵌套

  • 问题内容: 我在获取与Elasticsearch一起使用的嵌套查询时遇到问题(如果我删除了查询字符串之一,则可以使用)。我要解决的问题是我有一个包含关闭列表的文档(关闭)。我想在条件满足另一个值的闭包列表中搜索一个值。那只是从argan = 1的闭包中获得价值 我正在得到这个错误响应; 我的映射如下所示。 有人知道我在做什么错吗? 问题答案: 您的查询不是有效的查询。您需要使用适当的复合查询将其他

  • 我正在使用Xcode在swift中制作一个应用程序,并且我在某些按钮的动画方面遇到了问题。这是我的情况: 我在屏幕中间有三个按钮,在那里我还添加了一些限制。 我需要的是,当点击按钮时,它会到达屏幕的顶部,如第二张带有动画的照片: 我试过这个: 但发生的情况是按钮从屏幕底部出现向上滑动到第一张照片的位置。它不尊重我在动画中写的位置。这可能是由于约束吗?因为我将其垂直和水平居中。 你能帮我把它弄好吗?

  • 太长别读:@Depth(value=-1)抛出空指针,忽略1以上的其他值 在我的Spring Boot with Neo4j项目中,我有3个简单的实体与关系: 我创建了一个简单的图,如下所示: 使用以下存储库: 以及以下代码: 要检索与上图所示相同的图表(取自实际的neo4j仪表板),我执行,其中包含,然后打印保存的度量和检索的度量: 无论深度的值如何,我都无法获取包含所有子节点的Metric节点

  • 我有一个关于查询的问题,我实际上是在尝试膨胀视图,其中添加为朋友的人可以添加到回收器视图。 错误是: 原因:com。fasterxml。杰克逊。数据绑定。exc.UnrecognizedPropertyException:无法识别的字段“sahaj9917730102@gmail“(class.com.rana.sahaj.myyu.FriendsData),未标记为可忽略(5个已知属性:,”st