Firebase runTransactionBlock无法在swift 3中运行

Jel*_*lly 6 ios firebase swift firebase-realtime-database swift3

更新Xcode 8并将Swift 2项目转换为Swift 3后,其他代码运行良好,但runTransactionBlock无法正常工作,发现此错误:

"runTransactionBlock:在启用持久性时检测到使用情况.请注意,应用程序重新启动时不会保留事务"

可能有什么不对?

Firebase runTransaction Code

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)
            }
        }
Run Code Online (Sandbox Code Playgroud)

Wil*_*son 7

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

数据库

在此输入图像描述


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)
}
Run Code Online (Sandbox Code Playgroud)

注意

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