ios - Firebase runTransactionBlock 在 swift 3 中不起作用

标签 ios swift firebase firebase-realtime-database swift3

更新Xcode 8后,将Swift 2项目转为Swift 3,其他代码运行正常,但是runTransactionBlock不运行,发现这个错误:

"runTransactionBlock: usage detected while persistence is enabled. Please be aware that transactions will not be persisted across app restarts"

有什么问题吗?

Firebase 运行事务代码

postRef.runTransactionBlock({ (currentData: FIRMutableData) -> FIRTransactionResult in
            if var post = currentData.value as? [String : AnyObject], let uid = FIRAuth.auth()?.currentUser?.uid {
                var stars : Dictionary<String, Bool>
                stars = post["likeMap"] as? [String : Bool] ?? [:]
                var likeCount = post["likeCount"] as? Int ?? 0
                if let _ = stars[uid] {
                    // Unstar the post and remove self from stars
                    likeCount -= 1
                    self._liked = false
                    stars.removeValue(forKey: uid)
                } else {
                    // Star the post and add self to stars
                    likeCount += 1
                    self._liked = true
                    stars[uid] = true
                }
                post["likeCount"] = likeCount as AnyObject?
                post["likeMap"] = stars as AnyObject?
                self._likeCount = likeCount
                // Set value and report transaction success
                currentData.value = post

                return FIRTransactionResult.success(withValue: currentData)
            }
            return FIRTransactionResult.success(withValue: currentData)
        }) { (error, committed, snapshot) in
            if let error = error {
                print(error.localizedDescription)
            }
        }

最佳答案

不确定您使用的是哪个版本的 Firebase SDK,但我会为您提供一个我成功使用 runTransactionBlock 的基本示例:

数据库

enter image description here


代码

let ref = FIRDatabase.database().reference()
let refReservations = ref.child("reservations")


refReservations.runTransactionBlock { (currentData: FIRMutableData) -> FIRTransactionResult in
  if var data = currentData.value as? [String: Any] {
    var count = data["count"] as? Int ?? 0
    count += 1
    data["count"] = count
    
    currentData.value = data
  }
  
  return FIRTransactionResult.success(withValue: currentData)
}

注意事项

我使用的是 Firebase SDK 版本:3.0.1,您可以使用以下方法从您的代码中获取此信息:FIRDatabase.sdkVersion()

关于ios - Firebase runTransactionBlock 在 swift 3 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39763038/

相关文章:

php - 可以通过 Firebase REST API 更新自定义用户声明吗?

swift - 当我编译应用程序时,我得到一个等于这个 : Could not build Objective-C module 'Firebase' 的错误

java - 如何从 Firebase 实时数据库获取数据并将其显示在微调器中?

ios - 适用于 iOS 的 AWSS3TransferUtility 无法正常工作(虽然 AWSS3TransferManager 可以)

ios - 动画 TableView 单元格以向左滑动

ios - 如何使用 Swift 3 在 Read More/Less 中设置自动调整的标签高度?

ios - 如何通过在 Swift 中提供 header 来调用 RESTful API

ios - 下拉和反弹 Segue 动画

ios - 按钮标题字体

ios - 如何从 UILabel 中删除可选文本