我正在努力解决数据存储的问题。我正在编写使用Firebase进行身份验证和作为数据库的应用程序。该应用程序可作为踏板车共享。当用户点击一个标记并点击保留按钮时,踏板车将通过发送字符串值进行保留。它是这样的:
我点击预定按钮
我将sendnig检查值和用户ID作为userKey发送到选定的踏板车记录
我正在等待服务器响应(反馈)
如果有响应开始预约
如果用户改变主意并单击“取消”按钮,那么我将清除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
应该为空字符串。我正在第二天挣扎,不知道这是怎么了。
我将非常感谢您的帮助。
谢谢
最佳答案
当用户按下“取消”按钮时,您的代码只会更改状态和userKey,但不会更改将返回为true的反馈值。您需要添加一些内容来更改反馈:
ref?.child("service").child("scooters").child("\(scooterNumber!)").child("feedback").setValue(false)
另外,您还有:
if feedback && skuter.userKey == self.userID{ .... }
feedback
是布尔型吗?skuter.userKey
是字符串型吗?布尔&&字符串==字符串如何?