我正尝试将项目保存到从文本字段中获取的孩子下的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,我尝试在字段中使用文本,但不管我按下按钮来运行此功能如何,我都会遇到相同的错误。有人知道如何解决吗?
答案 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")
控制台:找不到名称