我应该在哪里从 UIViewController 中的 firebase 加载数据

Posted

技术标签:

【中文标题】我应该在哪里从 UIViewController 中的 firebase 加载数据【英文标题】:Where should I load data in from a firebase in a UIViewController 【发布时间】:2018-08-05 23:14:28 【问题描述】:

我无法确定应该将数据从 Firebase 加载到我的应用程序的哪个位置。我不确定将数据加载到 viewDidLoadviewWillAppear 的位置。我目前正在 viewDidLoad 中加载数据,但是当我访问另一个将项目添加到 Firebase 以由前一个视图控制器显示的视图控制器时。但是当我弹回原始视图控制器时,它不会在视图控制器中显示更新,该更新应该显示已更新或添加到数据库中的项目。

【问题讨论】:

视图中的更新确实加载并发布了更改通知,并在需要使用“通知中心”重新加载的地方观察它 这是一个很难回答的模糊问题;如果您离开的视图没有超出范围并且对它需要的数据有一个观察者,那么只要有数据的添加、更改或删除,该视图中的 Firebase 闭包就会自动被调用它在观察。同样,当您 弹回 到第一个控制器时,它可能只是跟随一个 segue back 或可能从一个回调函数返回。如果是这种情况,只需在此时调用 Firebase 函数即可进行刷新。您能否澄清这个问题,因为您将在没有更多数据的情况下得到一些随机答案。 【参考方案1】:

对于您的情况,最佳选择是 viewWillAppear,因为它会在您 pop back 时被调用,因此请确保释放数组并再次加载它(如果它不是子元素添加观察)

【讨论】:

有什么方法可以访问设备内的 Firebase 缓存数据并在那里进行更改/更新,而不是再次从 Firebase 获取所有这些数据?因为如果我们引用的数据量很大,那么它就是一个问题。【参考方案2】:

viewDidLoad() 仅在控制器加载到内存后被调用一次(更多信息在这里:https://developer.apple.com/documentation/uikit/uiviewcontroller/1621495-viewdidload)。

如果您想在返回控制器时更新数据,您应该在viewWillAppear()viewDidAppear() 中进行。后者在前者之后调用,因此您可以选择在哪里调用更新函数。

此外,您还可以使用NotificationCenter在有新数据时立即更新,而无需返回您的控制器。

【讨论】:

以上是关于我应该在哪里从 UIViewController 中的 firebase 加载数据的主要内容,如果未能解决你的问题,请参考以下文章

定位 UIViewController 包含子项

Xcode 错误的对象传递给 UIViewController

在哪里编写方法drawRect:iPhone SDK中的UIViewController和UITableViewCell

从 UIVIewController 向 SKScene 传递数据

Xcode:将信息从 UITableViewController 传递到 UIViewController

如何从 SKScene 回到 UIViewController (MenuVC)?