Как исправить ошибку при поиске ребенка в базе данных Firebase (Swift)? - PullRequest
0 голосов
/ 27 февраля 2019

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

@objc func submitNote() {
    print("Attempting to save or update note")

    //Check if file exists
    if name != nil && text != nil {
        //Access database
        var ref: DatabaseReference!
        ref = Database.database().reference()

        ref.child("lists").observeSingleEvent(of: .value, with: { (snapshot) in
            if snapshot.hasChild(self.name!){
                print("true")
                //Update

                return
            } else {
                print("false")
                //Create
                self.uploadNew()
            }
        })
        return
    } else {
        print("Error")
        return
    }
}

Это должна быть функция @objc, так как она запускается с помощью #selector в строке меню.Как вы можете видеть, он проверяет, чтобы текстовые поля не были пустыми.Вот переменные ...

public var name: String?
public var text: String?

, которые устанавливаются внутри отдельных функций ...

name = titleText.text
text = textView.text

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

*** Terminating app due to uncaught exception 'InvalidPathValidation', reason: '(hasChild:) Must be a non-empty string and not contain '.' '#' '$' '[' or ']''

Я проверил и проверил трижды, но в текстовых полях этих значений нет, и хотя оператор if предназначен для остановкиприложение продолжается, если они не равны нулю. Я пытался с текстом в полях, но независимо от того, что, если я нажму кнопку, чтобы запустить эту функцию, я получу ту же ошибку.Кто-нибудь знает как это исправить?

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Ваша структура Firebase не была включена в вопрос, поэтому я создам ее для вас

lists
   Leroy: true
   Billy: true
   James: true

Теперь немного кода, чтобы увидеть, существует ли имя в узле списков.Мы используем snapshot.exists, чтобы увидеть, были ли какие-либо данные возвращены в моментальном снимке.

func doesNameExistInLists(name: String) {
    let ref = self.ref.child("lists").child(name)
    ref.observeSingleEvent(of: .value, with: { snapshot in
        if snapshot.exists() {
            print("found it")
        } else {
            print("name not found")
        }
    })
}

, затем, когда он вызывается, вот результаты

self.doesNameExistInLists(name: "Billy")

console: найден

self.doesNameExistInLists(name: "aaaa")

консоль: имя не найдено

0 голосов
/ 27 февраля 2019

Вы только проверяете, является ли name не нулевым, но нет, если оно пустое ("")

  if let value = self.name, !value.isEmpty...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...