Swift Firebase查询无结果:LCList对象按name查询返回空快照
解决LCList按name查询返回空Snapshot的问题
看起来你踩了一个常见的Firebase查询误区——你现在用queryOrderedByKey()是针对节点的键(Key)做排序和匹配,但你的目标字段name是每个LCList对象下的子属性(Child Property),这俩不是一回事,所以查询自然找不到数据~
给你修正后的代码,核心是把排序方式改成按name子属性来:
listsRef.queryOrdered(byChild: "name") .queryEqual(toValue: name) // 如果是精确匹配用这个,模糊前缀匹配用queryStarting(atValue: name) .observeSingleEvent(of: .value, with: { snapshot in // 这里处理返回的snapshot if snapshot.exists() { // 遍历或解析数据 for child in snapshot.children { let childSnapshot = child as! DataSnapshot let listData = childSnapshot.value as! [String: Any] // 处理你的LCList对象数据 } } else { print("没有找到匹配name的LCList对象") } }) { error in print("查询出错:\(error.localizedDescription)") }
另外给你几个排查要点,避免再踩坑:
- 检查
name字段的拼写:确保数据库里的字段名和代码里的"name"完全一致(大小写、空格都不能错)。 - 确认数据库权限:如果你的Firebase数据库规则是默认的只读/只写权限,可能会导致查询返回空,要确保规则允许当前用户读取这些LCList数据。
- 区分匹配类型:
queryStarting(atValue: name)会返回所有name值以输入内容开头的对象,适合模糊前缀匹配;如果是要精确匹配某个name,用queryEqual(toValue: name)更准确。
内容的提问来源于stack exchange,提问作者Edmund Holderbaum
相关产品推荐
相关产品推荐

