【问题标题】:Why can't I perform a segue while write data to my Firebase database?为什么在将数据写入 Firebase 数据库时无法执行 segue?
【发布时间】:2019-01-08 22:19:51
【问题描述】:

我正在尝试从一个视图控制器到另一个视图控制器执行 segue,以便我可以传递数据。我正在将文本从文本字段传递到标签。另外,我正在尝试将该文本字段中的数据写入我的 Firebase 数据库。它不允许我在执行 segue 的同时写入数据。为什么会这样?如何同时进行?

我在两个视图控制器之间创建了一个显示转场,标识符为“nextTransition”。当我在添加数据库代码之前按下按钮时,segue 工作。一旦我添加了写入数据库的代码,我就会遇到无法写入的问题。它尝试使用 func 执行 segue,但没有改变任何内容。

@IBAction func nextButton(_ sender: Any) {
ref?.child("Title").childByAutoId().setValue("titleTextField.text")

performNextTransitionSegue()

下面是我为节目“nextTransition”创建的函数。

func performNextTransitionSegue() {
    if titleTextField.text != "" {
        performSegue(withIdentifier: "nextTransition", sender: self)
    }
}

我希望它会在 Firebase 数据库中创建显示 titleTextField.text,但实际上它什么也没做。

【问题讨论】:

  • 我相信写入 firebase 是一个异步函数。也许当您选择新的 VC 时,它会在完成写入之前关闭与 firebase 的连接。尝试在 setValue 的完成处理程序中进行 segueing? ref.setValue(object) { (error, ref) -> Void in }
  • 我发布了一个答案来完成您在评论中提到的代码,如果您想添加它作为答案,我可以删除我的@Mocha

标签: swift firebase firebase-realtime-database segue


【解决方案1】:

写入 firebase 是一个异步函数。当您选择新的 VC 时,它会在完成写入之前关闭与 firebase 的连接。在 setValue 方法的完成处理程序中转到您的新 VC。

ref?.child("Title").childByAutoId().setValue(`YourValue`) { (error, ref) in
        if error == nil {
            self.performNextTransitionSegue()
        } else {
            print("error")
        }
    }

【讨论】:

  • @emrepun 感谢您对我的信任。我不确定这是否是答案。
  • 我对 .setValue(locationObject) 有点困惑。在我的代码中使用它时出现错误。错误显示“使用未解析的标识符‘locationObject’;您的意思是‘_nativeObject’吗?”为什么会这样?我该如何解决?
  • @MikeD。 locationObject 是您想要的任何值...例如“TestValue” - 查看更新的答案
【解决方案2】:

正如我所见,你在这行有一个错误:

ref?.child("Title").childByAutoId().setValue("titleTextField.text")

因为

titleTextField.text

不能是字符串我的意思是它不需要用引号引起来。

之后请检查

titleTextField.text != ""

正在获得一些价值,这可能会避免您经历转场,您可以使用调试器进行检查。

如果线路正在运行,请检查您的 segue 是否正确命名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    相关资源
    最近更新 更多