【问题标题】:Firebase 2.0 - Reading data from FIRDataSnapshot not workingFirebase 2.0 - 从 FIRDataSnapshot 读取数据不起作用
【发布时间】:2016-07-01 01:31:40
【问题描述】:

我有一个搜索栏,当您键入它时,它会在数据库中搜索该用户的用户名。找到用户名的代码有效,但是当我尝试读取特定值时它崩溃了。这是代码

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {

          Database.child("users").queryOrderedByChild("username").queryEqualToValue(searchText).observeSingleEventOfType(.Value, withBlock: { snapshot in

        print(snapshot)
        print(snapshot.value!["first_name"] as? String)
        print(snapshot.value!["last_name"] as? String)
        print(snapshot.value!["username"] as? String)
        print(snapshot.value!["profile_picture_url"] as? String)
    })
}

打印快照的结果是

Snap (users) {
12345UIDEXample =     {
    "first_name" = Bob;
    "last_name" = Someone;
    "profile_picture_url" = "exampleurl.com";
    username = bobby;
  };
}

但是当我尝试访问时

snapshot.value!["first_name"] as? String

它返回 nil 并崩溃? 为什么如果它在 json 中清楚地显示它返回数据存在但不允许我提取值?

【问题讨论】:

    标签: swift firebase firebase-realtime-database


    【解决方案1】:

    您的快照包含第一级子级的值“12345UIDEXample”。

    要访问您要查找的数据,您可以使用循环遍历子代作为 FIRDataSnapshot。

    for child in snapshot.children.allObjects as! [FIRDataSnapshot]{
        let firstname = child.value!["first_name"] as? String
    }
    

    在此示例中,子值只会返回对象的另一个快照,如下所示:

    Snap(12345UIDEXample) {
        "first_name" = Bob;
        "last_name" = Someone;
        "profile_picture_url" = "exampleurl.com";
        username = bobby;
    };
    

    但是,您将能够像以前一样访问所需的字段。

    【讨论】:

      【解决方案2】:

      当尝试访问快照属性时,请使用 childSnapshot(forPath:) 参见另一个示例 here。

      但基本上看起来像:

      for child in snapshot.children.allObjects as! [FIRDataSnapshot] { let firstname = child.childSnapshot(forPath: "first_name").value as? String }

      【讨论】:

        猜你喜欢
        • 2021-05-10
        • 2021-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-15
        • 1970-01-01
        • 2018-04-11
        相关资源
        最近更新 更多