gpt4 book ai didi

ios - Firebase runTransactionBlock() 删除节点

转载 作者:搜寻专家 更新时间:2023-11-01 07:28:51 28 4
gpt4 key购买 nike

我正在使用适用于 iOS 的 Firebase SDK (2.4.2)。以下代码是 SLComposeServiceViewController 对象中使用的 didSelectPost() 函数的一部分。在常规 UIViewController 中使用时,指出这种行为是不一样的非常重要(我知道这很奇怪)。

假设有以下基本代码:

    override func presentationAnimationDidFinish() {
// Retrieving content and identifying type here
}

override func didSelectPost() {
self.myRootRef.runTransactionBlock({
(currentData:FMutableData!) in
currentData.value = "test"

// Finalizing the transaction
return FTransactionResult.successWithValue(currentData)
}
)

self.extensionContext!.completeRequestReturningItems([], completionHandler: nil)
}

交易完成后,node_value 将从 Firebase 中完全消失。该值未设置,节点已删除。这是一个非常奇怪和意外的行为!

另一方面,以下代码按预期工作。

    override func didSelectPost() {
self.myRootRef.setValue("test", withCompletionBlock: {
(error:NSError?, ref:Firebase!) in
if (error != nil) {
print("Data could not be saved.")
} else {
print("Data saved successfully!")
}
})

self.extensionContext!.completeRequestReturningItems([], completionHandler: nil)
}

几天前不存在这个问题,最后我运行了上面的代码。关于问题是什么的任何见解?

最佳答案

如果将 nil 设置为 Firebase 数据库中的路径,它将执行与 .removeValue() 相同的操作。

在运行事务时,您应该检查nil因为如果没有写入默认值,可以使用nil 调用事务。 p>

myRootRef.runTransactionBlock({
(currentData:FMutableData!) in
var value = currentData.value as? Int
if value == nil {
value = 0
}
currentData.value = value! + 1
return FTransactionResult.successWithValue(currentData)
})

阅读Firebase Docs获取更多信息。

关于ios - Firebase runTransactionBlock() 删除节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33966837/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com