交易块有错误的退货

时间:2018-01-24 14:28:09

标签: ios swift firebase firebase-realtime-database

所以我使用此功能来控制我的应用中的参加和不参加活动的功能。我的firebase数据库包含每个事件的参与计数。我还使用事务块来促进多次单击该按钮的任务,并确保数据计数在发生时不会被破坏。

以下是我尝试更改数据库以确保有人参加活动时使用的功能。

static func create(for event: Event?, success: @escaping (Bool) -> Void) {
        // 1
        guard let key = event?.key else {
            return success(false)
        }
        guard let uid = Auth.auth().currentUser?.uid else{
            return
        }
        let attendData = ["Attending/\(key)/\(uid)" : true,
                          "users/\(uid)/\("Attending")/\(key)" : true]

        // 2
        let ref = Database.database().reference()
        ref.updateChildValues(attendData) { (error, _) in
            if let error = error {
                assertionFailure(error.localizedDescription)
                return success(false)
            }

            // 3
            //return success(true)

            let attendCountRef = Database.database().reference().child("events").child(key).child("attend:count")
            attendCountRef.runTransactionBlock({ (mutableData) -> TransactionResult in
                let currentCount = mutableData.value as? Int ?? 0
                print(mutableData.value)
                print(currentCount)

                mutableData.value = currentCount + 1

                return TransactionResult.success(withValue: mutableData)
            }, andCompletionBlock: { (error, _, _) in
                if let error = error {
                    assertionFailure(error.localizedDescription)
                    success(false)
                } else {
                    success(true)
                }
            })
        }
    }

这是我的数据库结构样本

"events" : {
    "ABP" : {
      "attend:count" : 2,
      "event:category" : "Seize The Night",
      "event:city" : "Philadelphia",
      "event:date" : {
        "end:date" : "08/09/2017",
        "end:time" : "7:00 PM",
        "start:date" : "08/10/2017",
        "start:time" : "12:00 PM"
      }
}

似乎是交易阻止。它没有抓住参加人数。它返回零而不是2.在数据库端没有正确地改变它。任何帮助表示赞赏

0 个答案:

没有答案