背景:
我有一个应用程序,新用户完成一个注册表格(包括用户名,电子邮件和密码)注册一个帐户。当新用户提交表单时,应用程序将检查其Firebase数据库,以查看用户名是否已被使用。这里的问题是observeSingleEvent(of:with:)没有得到最新的数据。当我直接从Firebase控制台更新数据时,这些更改不会反映在observeSingleEvent(of:with:)返回的结果中。即使在应用程序重新启动之间,也不会返回新的数据更改。
我在这个问题上看到的唯一东西就是这里。用户说在使用observeSingleEvent(of:with:)时不启用持久性。但是,我有持久性障碍。另外,我将FIRDatabase实例上的FIRDatabase设置为false (我也尝试了true )。这两种环境都没有运气。
下面是我正在尝试的一个例子:
let usersDatabaseReference = FIRDatabase.database().reference().child("users")
usersDatabaseReference.keepSynced(false)
// Query the database to see if the username is available
// The user with the username "mark" was removed from the database via the Firebase console
let username = "mark" // This user used to exist in the database (and was previously added through the app).
usersDatabaseReference.child(username).observeSingleEvent(of: .value, with: { (snapshot) in ... } )上面的代码块应该返回最新的数据(用户“标记”不应该存在的数据)。
我想知道是否还有其他人遇到了这个问题,或者是否有人有可能解决这个问题。
注意:使用iOS 10.1和SWIFE3进行开发。
发布于 2017-04-01 19:15:55
因此,我的问题与缓存或获取旧结果无关。我的一些代码逻辑依赖于检查snapshot参数的snapshot,该参数是在observeSingleEvent(of:with:)的完成处理程序中传回的。我错误地认为,我可以通过将null数据库值与nil进行比较来检查它;这导致了对结果的误解。
实际检查null数据库获取的最佳方法是调用FIRDataSnapshot实例上的exists()方法。如果exists()包含非-null值,则snapshot返回snapshot。
发布于 2017-03-31 16:34:48
observeSingleEvent(of:with:)只返回值一次
试试这个:
refHandle = postRef.observe(FIRDataEventType.value, with: { (snapshot) in
let postDict = snapshot.value as? [String : AnyObject] ?? [:]
// ...
})这将在数据库事件链接上添加侦听器。
发布于 2017-03-31 16:18:54
我建议您使用用户名作为键重构JSON数据模型。这样做,在数据库中创建一个重复的用户时,您应该得到一个错误。
https://stackoverflow.com/questions/43145293
复制相似问题