我正在为存储数据而苦苦挣扎。我正在编写使用Firebase进行身份验证和作为数据库的应用程序。该应用程序可作为踏板车共享。当用户点击一个标记并点击保留按钮时,踏板车将通过发送字符串值进行保留。它是这样的:
如果用户改变主意并单击“取消”按钮,我将清除userKey并将状态从“保留”更改为“关闭”。
而且有一个问题。
即使在适当的踏板车上清除了userKey时,仍可以执行负责预订的功能。例如,当我模拟服务器并向先前保留的踏板车发送feedback
命令时,即使userKey
为空字符串,仍可以执行下面的代码。尚未保留的踏板车并没有发生这种情况。主要代码如下:
func fetchScooters(){
ref?.child("service").child("scooters").observe(.value, with: { (snapshot) in
if snapshot.exists(){
let array:NSArray = snapshot.children.allObjects as NSArray
self.skutery = []
for child in array{
let snap = child as! DataSnapshot
if let dictionary = snap.value as? [String: Any] {
let skuter = ScooterInformation()
skuter.name = dictionary["name"] as? String
skuter.state = dictionary["state"] as? String
skuter.latitude = dictionary["latitude"] as? String
skuter.longitude = dictionary["longitude"] as? String
skuter.battery = dictionary["battery"] as? String
skuter.engine = dictionary["engine"] as? String
skuter.start = dictionary["start"] as? CLong
skuter.userKey = dictionary["userKey"] as? String
self.skutery.append(skuter)
if skuter.userKey == self.userID{
self.hideAllScootersIfUserReserved(scooterInfo: self.skutery)
// THERE IS SOMETHING WRONG....
self.handle = snap.ref.child("feedback").observe(.value, with: { (feedback) in
if let feedback = feedback.value as? Bool{
if feedback && skuter.userKey == self.userID{
print("Feedback received")
self.coundDown.invalidate()
self.timeToConnect = 20
snap.ref.child("feedback").removeValue()
snap.ref.child("check").removeValue()
if self.wantToRunScooter {
self.startScooter()
} else if self.userIsReservedScooter{
self.setStatusAsReserved()
self.userIsReservedScooter = false
}
}
}
})
点击取消按钮,将执行以下操作:
ref?.child("service").child("scooters").child("\(scooterNumber!)").child("state").setValue("*oF&")
ref?.child("service").child("scooters").child("\(scooterNumber!)").child("userKey").setValue("")
由于handle
应该为空字符串,即使skuter.userKey
不等于User ID
,skuter.userKey
函数仍然可以执行。
第二天我很挣扎,不知道这是怎么了。
我将非常感谢您的帮助。
谢谢
答案 0 :(得分:0)
当用户按下“取消”按钮时,您的代码仅更改状态和userKey,但不更改将返回为true的反馈值。您需要添加一些内容来更改反馈:
ref?.child("service").child("scooters").child("\(scooterNumber!)").child("feedback").setValue(false)
加上您有
if feedback && skuter.userKey == self.userID{ .... }
feedback
不是布尔型,skuter.userKey
是字符串吗?布尔&&字符串==字符串如何?