【发布时间】:2021-02-25 13:43:52
【问题描述】:
JSON
switch
uid
switch : true
uid2
switch : false
更新:以上是我在杰伊的评论后添加的数据库结构。
我会很快做到:
let databaseRef = Database.database().reference().child("switch").child(self.postID)
databaseRef.queryOrdered(byChild: "switch").queryEqual(toValue: "true").observeSingleEvent(of: .value) { (snapshot) in
print(snapshot)
if snapshot.exists() {
print("Address is in DB")
} else {
print("Address doesn't exist")
}
}
但我必须使用 Objective C,因为我必须使用 Objective C 选择器
@objc func didLongPress() {
///that snapshot
}
override func awakeFromNib() {
super.awakeFromNib()
let longPress = UILongPressGestureRecognizer(target: self, action: #selector(didLongPress))
like.addGestureRecognizer(longPress)
}
更新:可能的解决方案?
let ref = Database.database().reference().child("switch").child(self.postID).child("switch")
ref.observeSingleEvent(of:.value, with: {snapshot in
if snapshot.exists() {
print("Got data \(snapshot.value!)") //will print true or false
let ab = snapshot.value!
if ab as! Int>0 {
print("yes")
} else {
print("no")
}
}
else {
print("No data available")
}
})
【问题讨论】:
-
Firebase 文档也展示了 Objective C 代码示例:firebase.google.com/docs/database/ios/…
-
谢谢。我会尽力。但是在哪里添加
@property (strong, nonatomic) FIRDatabaseReference *ref;以获取 swift 等效的var ref: DatabaseReference! -
不要将 Objc 选择器与与 firebase 交互的实际代码混淆。您当然可以将 Swift 与 @objc 一起使用。当您将 @objc 应用于 Swift 项目中的类或方法时,它将使它们可用于 Objective-C 以及 Swift 代码。问题似乎与您的查询有关;它针对子节点
switch运行,然后在看起来不正确的子节点switch上进行查询。 -
此外,在发布 Firebase 问题时,包括您的结构也很重要,因此我们可以看到您正在尝试做什么。所以,用你的结构更新你的问题,请作为文本,没有图像。要获取您的 Firebase 结构,请使用 Firebase 控制台->导出 JSON,然后复制并粘贴您的结构的 sn-p。
-
@Jay 谢谢。这很奇怪。所以我应该能够在目标 c 函数中使用 swift 代码。我添加了数据库结构。我不认为问题出在同名的孩子身上。我还使用名为 switch1 的第二个 switch 子项进行了测试
标签: objective-c swift firebase firebase-realtime-database snapshot