У меня есть панель поиска, которая позволяет мне искать пользователей по их имени пользователя.Результаты будут отображать пустую ячейку с именем пользователя, возвращающим ноль.
Я пытался изменить ссылочный путь на ref.queryOrdered(byChild:"information")
и пропустил имя, но это не сработало.Я также пытался использовать путь ссылки как ref.observeSingleEvent
, но не получал ни одного снимка взамен.
Другие ссылки, на которые я обращался за помощью:
- База данных Firebase внезапно возвращает ноль
- Возвращение данных Firebase ноль
- Получение данных из Firebase вернуло nil
JSON в Firebase для users
настроен следующим образом:
{
"UserId" : {
"information" : {
"name" : "bobby",
},
}
}
Фрагмент кода ниже:
class SearchUser {
var id: String?
var name: String?
}
extension SearchUser {
static func setUser(dict: [String: Any], key: String) -> SearchUser
{
let user = SearchUser()
user.id = key
user.name = dict["name"] as? String
return user
}
// MARK: Search for users
static func queryUsers(withText text: String, completion: @escaping
(SearchUser) -> Void) {
let ref = Database.database().reference().child("users")
ref.queryOrdered(byChild:
"information/name").queryStarting(atValue:
text).queryEnding(atValue: text+"\u{f8ff}").queryLimited(toFirst:
10).observeSingleEvent(of: .value, with: { (snapshot) in
snapshot.children.forEach({ (s) in
//Snapshot displays the correct user info
print("Snapshot is: \(snapshot)")
let child = s as! DataSnapshot
if let dict = child.value as? [String: Any] {
let user = SearchUser.setUser(dict: dict,
key: child.key)
// Returns nil
print("User is: \(String(describing: user.name))")
// Will return correct ID
print("User ID: \(String(describing: user.id))")
completion(user)
}
})
})
}
}
Я ожидаю, что user.name вернет имя пользователя, но текущий вывод равен нулю.