【问题标题】:Swift pushed Viewcontroller error when retrieving data with Viewmodel and FirebaseSwift 在使用 Viewmodel 和 Firebase 检索数据时推送 Viewcontroller 错误
【发布时间】:2021-05-07 13:57:07
【问题描述】:

我有两个 ViewController 用于显示来自 Firebase 的数据。在第一个 ViewController 中,我可以在调用 ViewModel 时显示我想要的数据。当我按下第一个 ViewController 中的按钮时,我会导航到第二个 ViewController:

navigationController?.pushViewController(secondViewController, animated: true)

我有一个从 ViewModel 中检索的用户对象,该对象从 Firebase 中检索数据:

    userRetrievedData = userViewModel.user

视图模型:

let firstName = document.get("firstName") as? String ?? ""
self.user = Account(firstName: firstName)

之前我可以在第二个 ViewController 中检索数据,但现在它给了我一个错误。

致命错误:在展开可选值时意外发现 nil:文件

在这一行上,我在第二个 Viewcontroller 中遇到错误,而在第一个 Viewcontroller 中的同一行有效:

userRetrievedData.firstName! 

为什么它在第二个 ViewController 而不是第一个中给出了这个错误?

ViewController 内部的声明是一样的:

var userRetrievedData = User()
var userViewModel = UserViewModel()

【问题讨论】:

  • 你能发布你的第二个 ViewController 的代码吗?你在哪里声明userRetrievedData 对象?
  • 我在两个 ViewController 的顶部声明,我编辑了我的代码。
  • 好的,所以看起来问题是您仅在第一个视图控制器中初始化userRetrievedData,而不是另一个。您应该在引用其属性之前在第二个视图控制器中初始化该实例。
  • 我在两个 ViewController 中都有代码,所以这不是问题。调用视图模型的声明和方法。我打错了 ViewController 而不是 ViewModel 现在编辑了帖子
  • 和文章最后部分一样。只有“ViewController 内部的声明”我没有“ViewModel 内部的声明”代码是用于 ViewController。我提到的代码是 ViewController 中的初始化。

标签: swift xcode firebase google-cloud-firestore viewmodel


【解决方案1】:

您是否将对象从第一个传递到第二个?我会在未初始化的第二个控制器中使用可选变量,以便它从第一个控制器中获取它。

您可以在第一个控制器中进行操作

secondViewController.userRetrievedData = userRetrievedData
navigationController?.pushViewController(secondViewController, animated: true)

在第二个控制器中

userRetrievedData?.firstName

【讨论】:

  • 我通过将它从第一个视图控制器传递到第二个来让它工作。但是为什么我不能通过 viewcontroller 和 firebase 在第二个 viewcontroller 中再次检索数据,而只能通过第一个。
  • 另外可选部分不起作用我必须使用感叹号!让它工作
  • 如果您想这样做,您可以这样做,但请记住,在您身边拨打电话以及用户为相同数据的带宽付费是有成本的
  • 通常强制取消回收不是一个好主意,因为它可能会使应用程序崩溃,请尝试使用保护语句 guard let firstName = userRetrievedData?.firstName else {}
  • 这样不行,但我只是想知道为什么它不能通过在不同的视图控制器中再次调用数据来工作。我将尝试使用警卫语句
猜你喜欢
  • 2017-07-08
  • 2016-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多