【问题标题】:Retrieving data with Firebase database in iOS在 iOS 中使用 Firebase 数据库检索数据
【发布时间】:2016-07-14 14:48:00
【问题描述】:

在我的应用中,我有一个简单的用户群,如下所示:

我要做的是简单地获取此列表一次,以检查新用户使用新用户名注册时用户名是否有效。
问题是我发现检索数据的唯一方法是使用某种观察者方法,这对我不利。

我试图实现的逻辑(使用不起作用的检索方法):

// When user tries to sign up with a new username

let username = nicknameField.text?.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())    

self.usersRef.observeEventType(.Value) { (snapshot: FIRDataSnapshot) in
    let dict = snapshot.value as! NSDictionary
    for val in dict.allValues {
        if username == val as! String {
            // Present alert
            return
        }
    }
}   

self.usersRef.child(username).setValue(username) { (error, dbRef) in
    if error == nil {
        // Continue
    }
}

我怎样才能只获取用户列表一次? 提前致谢!

【问题讨论】:

  • 您可能想使用ObserveSingleEventOfType。查看此链接:https://firebase.google.com/docs/database/ios/retrieve-data#read_data_once
  • 使用“observeSingleEventOfType”而不是“observeEventType”

标签: ios swift firebase firebase-realtime-database


【解决方案1】:

我不得不将 observeEventType 方法更改为 observeSignleEventOfType
我还更新了我的代码以使其正常工作(无论如何):

self.usersRef.observeSingleEventOfType(.Value) { (snapshot: FIRDataSnapshot) in
let dict = snapshot.value as! NSDictionary
for val in dict.allValues {
    if username == val as! String {
        // Present alert
        return
    }
    else {
        self.usersRef.child(username).setValue(username) { (error, dbRef) in
        if error == nil {
            // Continue
        }
    }
} 

【讨论】:

  • 你可能不想那样做。您的结构很可能会发生变化,并且 user1 可能有子代:user_name、user_bday 等。最好使用 for child in snapshot.children 迭代快照,然后在 for 循环中捕获数据来自每个孩子。
猜你喜欢
  • 2023-04-03
  • 2017-01-15
  • 2020-02-09
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多