2016-07-14 2 views
1

В моем приложении у меня есть простая пользовательская база, которая выглядит следующим образом:Получения данных с базой данных в Firebase прошивке

enter image description here

То, что я пытаюсь сделать, это просто извлечь этот список один раз, чтобы проверить имя пользователя будет действительным, если новый пользователь зарегистрируется с новым именем пользователя.
Дело в том, что единственные пути, которые я нашел для извлечения данных, используют какие-то методы наблюдения, которые мне не подходят.

Логика я пытаюсь достичь (с помощью метода извлечения, который не работает):

// 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 
    } 
} 

Как я могу просто просто получать список пользователей, один раз? Спасибо заранее!

+2

Вы хотели бы использовать 'ObserveSingleEventOfType'. Чеч эту ссылку: 'https: // firebase.google.com/docs/database/ios/retrieve-data # read_data_once' – triandicAnt

+2

Использовать" observSingleEventOfType "вместо" observEventType " – Blankarsch

+0

Связанный: http://stackoverflow.com/q/ 38334284/213156 –

ответ

0

Мне пришлось изменить метод 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 
     } 
    } 
} 
+0

Возможно, вы не захотите этого делать. Скорее всего, ваша структура изменится, и у пользователя1 могут быть дети: user_name, user_bday и т. Д. Вам лучше было бы перебирать снимок с помощью * для child в snapshot.children *, а затем внутри этого для данных захвата цикла от каждого ребенка. – Jay

Смежные вопросы