2016-05-25 4 views
3

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

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

Heres то, что я делаю в настоящее время;

Firebase *ref = [[Firebase alloc] initWithUrl: @"https://sizzling-inferno-255.firebaseio.com/"]; 

//Refer to users entity 
Firebase *usersRef = [ref childByAppendingPath: @"id/"]; 

// Read data and react to changes 
[usersRef observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) { 
    NSLog(@"%@ -> %@", snapshot.key, snapshot.value); 

    NSDictionary *dict=[NSDictionary dictionaryWithDictionary:snapshot.value]; 
    NSString *stri=[NSString stringWithFormat:@"%@",dict]; 

    _textview1.text = stri; 

    string1 = snapshot.key; 
    _label1.text = string1; 

}]; 

Не стесняйтесь проверить сами, используя URL, я использую это только для тестирования.

I found something close на то, что мне нужно, однако это не в Objective C.

+0

Вы хотите проверить, существует ли какой-либо суб-url 'sizzleing-inferno-255'? – BlackBox

+0

Нет, я хочу проверить, существует ли запись внутри sizzling-inferno-255, просто называя ее в текстовом поле. – vype

+0

Почему бы вам не перечислить все snapshot.key s в NSMutableArray, а затем проверить, содержится ли текст, вставленный пользователем в массив? (Вы можете проверить равенство с 'stringEquals', я не знаю, может ли функция' containsObject' сравнивать адрес памяти с экземплярами класса вместо строкового значения. – BlackBox

ответ

3

Я новичок в firebase, но я работал слишком много на новой версии.

Record имя вашего key внутри sizzling-inferno-255? Так что, если это так. В этой новой версии вы можете получить информацию по:

FIRDatabaseReference *usersRef = [[FIRDatabase database] reference]; 

[[[[usersRef child:@"results"] child:@"sizzleing-inferno-255"] child:@"record"] observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) { 

    NSString *record = snapshot.value; 
    if(record.length > 0) { 
     // Yes! there is a record. 
    } 

} 

Это то, что вы хотите? Дай мне знать.

+0

, когда я использую это, я просто получаю сообщение об ошибке, нет видимого @interface для 'firebase' объявляет селектор 'child' – vype

+0

Я отредактировал свой ответ, потому что получить ссылку в новой firebase немного иначе. Вы используете новую версию? Если не проверить это https://firebase.google.com/docs/ios/setup#prerequisites –

+1

Это не запрос. Он привязывает наблюдателя к узлу, который возвращает все данные в этом узле (возможно несколько дочерних узлов), а затем ожидает каких-либо событий внутри этого узла. OP искал данные на определенном узле.В качестве побочного примечания этот код также потерпит неудачу, если в снимке возвращается более одного узла, поскольку snapshot.value будет словарем, который нельзя назначить NSString. Вам нужно будет перебирать дочерние узлы с помощью * для дочернего элемента в snapshot.children * – Jay

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