我应该在哪里从 UIViewController 中的 firebase 加载数据
Posted
技术标签:
【中文标题】我应该在哪里从 UIViewController 中的 firebase 加载数据【英文标题】:Where should I load data in from a firebase in a UIViewController 【发布时间】:2018-08-05 23:14:28 【问题描述】:我无法确定应该将数据从 Firebase 加载到我的应用程序的哪个位置。我不确定将数据加载到 viewDidLoad 或 viewWillAppear 的位置。我目前正在 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 加载数据的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 错误的对象传递给 UIViewController
在哪里编写方法drawRect:iPhone SDK中的UIViewController和UITableViewCell
从 UIVIewController 向 SKScene 传递数据