首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >observeSingleEvent(of:具有:)获取旧数据

observeSingleEvent(of:具有:)获取旧数据
EN

Stack Overflow用户
提问于 2017-03-31 16:15:17
回答 3查看 705关注 0票数 6

背景:

我有一个应用程序,新用户完成一个注册表格(包括用户名,电子邮件和密码)注册一个帐户。当新用户提交表单时,应用程序将检查其Firebase数据库,以查看用户名是否已被使用。这里的问题是observeSingleEvent(of:with:)没有得到最新的数据。当我直接从Firebase控制台更新数据时,这些更改不会反映在observeSingleEvent(of:with:)返回的结果中。即使在应用程序重新启动之间,也不会返回新的数据更改。

我在这个问题上看到的唯一东西就是这里。用户说在使用observeSingleEvent(of:with:)时不启用持久性。但是,我有持久性障碍。另外,我将FIRDatabase实例上的FIRDatabase设置为false (我也尝试了true )。这两种环境都没有运气。

下面是我正在尝试的一个例子:

代码语言:javascript
复制
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进行开发。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-01 19:15:55

因此,我的问题与缓存或获取旧结果无关。我的一些代码逻辑依赖于检查snapshot参数的snapshot,该参数是在observeSingleEvent(of:with:)的完成处理程序中传回的。我错误地认为,我可以通过将null数据库值与nil进行比较来检查它;这导致了对结果的误解。

实际检查null数据库获取的最佳方法是调用FIRDataSnapshot实例上的exists()方法。如果exists()包含非-null值,则snapshot返回snapshot

票数 0
EN

Stack Overflow用户

发布于 2017-03-31 16:34:48

observeSingleEvent(of:with:)只返回值一次

试试这个:

代码语言:javascript
复制
refHandle = postRef.observe(FIRDataEventType.value, with: { (snapshot) in
  let postDict = snapshot.value as? [String : AnyObject] ?? [:]
  // ...
})

这将在数据库事件链接上添加侦听器。

票数 1
EN

Stack Overflow用户

发布于 2017-03-31 16:18:54

我建议您使用用户名作为键重构JSON数据模型。这样做,在数据库中创建一个重复的用户时,您应该得到一个错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43145293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档