2016-10-29 3 views
0

Я разрабатываю небольшое приложение в iOS с использованием Swift и Firebase. У меня возникают проблемы с запросом данных и получением значения. Моя firebase база данных в реальном времени заключается в следующем:Firebase queryEqualToValue получить ключ в Swift 2.3

"qrcode" : { 
    "postsedation_room" : "http://bing.com", 
    "preprocedure_room" : "http://google.com", 
    "presedation_room" : "http://en.m.wikipedia.org" 
} 

Я хотел бы сделать этот запрос:

let query = rootRef.child("qrcode").queryEqualToValue("http://bing.com") 

query.observeSingleEventOfType(.Value, withBlock: { snapshot in 
    print(snapshot) 
}) 

печати значение ключа "postsedation_room". На данный момент результат печати Snap (qrcode) <null> Вы могли бы помочь мне, чтобы я мог распечатать ключ, учитывая значение ребенка?

+0

@ EICaptainv2.0 как бы я идти об изменении моего кода, чтобы устранить эту проблему нулевой ? –

ответ

0

Когда вы выполняете запрос к базе данных Firebase, потенциально может быть несколько результатов. Поэтому, если вы привязываете наблюдателя значений, то моментальный снимок содержит список этих результатов. Даже если есть только один результат, моментальный снимок будет содержать список из одного результата.

Итак, в вашем наблюдателе вам нужно будет обработать этот список. Самый простой способ сделать это состоит в итерацию над ним:

let query = rootRef.child("qrcode").queryOrderedByValue().queryEqualToValue("http://bing.com") 

query.observeSingleEventOfType(.Value, withBlock: { snapshot in 
    for child in snapshot.children { 
     print(child.key) 
    } 
}) 

В качестве альтернативы вы можете наблюдать один childAdded eventL

let query = rootRef.child("qrcode").queryEqualToValue("http://bing.com") 

query.observeSingleEventOfType(.ChildAdded, withBlock: { snapshot in 
    print(snapshot.key) 
}) 
+0

Я пробовал оба варианта, в обоих случаях он возвращал null ... есть ли у вас какие-либо другие предложения? –

+0

Спасибо! Это сработало! –

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