如何在Firebase数据库(Swift)中寻找孩子时解决错误?

时间:2019-02-27 07:42:28

标签: swift firebase firebase-realtime-database

我正尝试将项目保存到从文本字段中获取的孩子下的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语句旨在停止应用程序继续运行,除非它们不等于nil,我尝试在字段中使用文本,但不管我按下按钮来运行此功能如何,我都会遇到相同的错误。有人知道如何解决吗?

2 个答案:

答案 0 :(得分:0)

您仅检查name是否不为空,否则检查是否为空(“”)

  if let value = self.name, !value.isEmpty...

答案 1 :(得分:0)

您的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")

控制台:找到了

self.doesNameExistInLists(name: "aaaa")

控制台:找不到名称