在我的应用程序上注册我检查用户名是否已经采取。
我安装了应用程序,去注册,检查用户名是否是免费的,一切正常。如果用户名被占用,它告诉我。但后来当我创建帐户,并试图创建另一个相同的用户名,由于某种原因,这个用户名无法在数据库中找到,即使它在那里。
下面是我使用的代码:
func singleObserveUser(withUsername username: String, completion: @escaping (UserModel) -> Void, onError: @escaping (String) -> Void) {
let queryUsername = username.lowercased().trimmingCharacters(in: .whitespaces)
usersRef.queryOrdered(byChild: Constants.UserData.UsernameLowercased).queryEqual(toValue: queryUsername).observeSingleEvent(of: .value) { (snapshot) in
if let _ = snapshot.value as? NSNull {
onError("No userdata found")
} else {
if let dict = snapshot.value as? [String: Any] {
let user = UserModel.transformDataToUser(dict: dict, id: snapshot.key)
completion(user)
} else {
onError("No userdata found")
}
}
}
}
如果我重新启动应用程序-一切都还是一样的。如果我删除应用程序并再次安装-一切都工作正常。
Firebase等接缝可在手机上保存一些数据。
谢谢你的帮助!
1条答案
按热度按时间g6ll5ycj1#
如果您启用了磁盘持久性(iOS和Android的默认设置),客户端会存储最近看到的数据,以便以后能够更快地查找,并且
observeSingleEvent(of
会从缓存中返回值。如果你想确保你从服务器上得到最新的值,请使用
getData
,如文档中关于一次性获取数据的说明所示。另外,请查看Firebase Offline Capabilities和addListenerForSingleValueEvent,以获得对该行为的更详细的解释。