swift - 为什么在将数据写入 Firebase 数据库时无法执行 segue?
问题描述
我正在尝试从一个视图控制器到另一个视图控制器执行 segue,以便我可以传递数据。我正在将文本从文本字段传递到标签。另外,我正在尝试将该文本字段中的数据写入我的 Firebase 数据库。它不允许我在执行 segue 的同时写入数据。为什么会这样,我怎么能同时做这两个?
我在标识符为“nextTransition”的两个视图控制器之间创建了一个 show segue。当我在添加数据库代码之前按下按钮时,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 方法的完成处理程序中转到您的新 VC。
ref?.child("Title").childByAutoId().setValue(`YourValue`) { (error, ref) in
if error == nil {
self.performNextTransitionSegue()
} else {
print("error")
}
}
推荐阅读
- c++ - GLFW/OpenGL 窗口中的模糊背景(亚克力效果)
- java - 为什么 Sentry 不适用于我的 Log4j2
- ios - Safari 无法打开页面“localhost:8080/console”。错误是:“从 'localhost:8080/console' 取消加载,因为它使用的是 HTTP/0.9。” (:0)
- google-chrome - 无法在 Chrome 浏览器上使用谷歌“产品”
- google-bigquery - 如何检查 Google BigQuery SQL 中的多个模式?(喜欢 + 输入)
- python - 从存储在 Google Cloud Storage 中的文件创建 tar 存档
- python - 如何使用 yfinance 检测失败的下载
- c - 如何在 MacOS for Windows 上编译
- angular - Angular AsyncValidatorFn 导致 CPU 和内存使用率高
- apache - RedirectMatch 添加额外的 url 段