何时从Firebase加载数据

时间:2018-09-14 16:20:10

标签: ios swift4

我正在使用名为ACTabScrollView的可可豆荚。在演示代码中,它具有用于UI部件的视图控制器(该视图控制器可左右滚动并具有不同的选项卡),以及具有表视图的视图控制器(“内容视图控制器”)。每个选项卡在每个表视图上显示不同的信息,但是该信息来自单个数组,并通过分配的枚举进行划分。如果这令人困惑,则ACTabScrollView自述文件上有一个gif。在我的“内容视图控制器”中,我可以对数组进行硬编码,并且可以完美地工作。此内容视图控制器的类具有一个变量声明,因为我是iOS编程的新手,所以从未见过。

var category: TeamCategory? {
    didSet {
        for team in Team.teamArray {
            if (team.category == category || category == .all) {
                teamArray.append(team)
            }
        }
    }
}

具有此摘要的项目示例位于here

在上面的代码片段中,“团队”是团队的模型,并且该类具有一组硬编码的团队(即结构)。

很显然,我不想在应用程序中对Teams数组进行硬编码,因为我希望能够更新该数组并使其实时更新。我正在使用Firebase,并且尝试在App Delegate,UI视图控制器和内容视图控制器中加载数组,但是tableView不会填充。我已确认数据已到。

何时/从哪里加载Firebase数据?内容视图控制器需要在加载视图控制器之前先加载数组。任何提示,将不胜感激。

1 个答案:

答案 0 :(得分:0)

何时应从Firebase加载数据是设计决定。您说过,内容视图控制器需要在加载视图控制器之前先加载数组,因此您应该在应用程序流中的某个点从Firebase请求数据,这样可以保证请求在返回之前会随数据一起返回您的TableView正在尝试加载该数据。

您可能正在竞争一种竞争状态,您在其中请求数据,然后在请求完成之前转到内容视图控制器。

通常,您不必依赖于保证请求会及时完成的​​保证,因此我建议您执行@rmaddy建议的操作,在此之前先加载数据,然后再使用某种完成处理程序/通知/委托调用,一旦您要从中提取数据的数组更新,它将在tableView上调用reloadData

您所引用的项目样本不能像您正在处理的那样处理异步情况。属性声明中的didSet只是一个闭包,当您为该属性设置值时将执行该闭包。对于项目示例,新闻类别在视图控制器实例化时设置,然后didSet执行一次,并附加适当的新闻数组以供tableView访问。同样,在您的情况下,只要在数据从Firebase返回后更新包含表视图数据源的数组,则对tableView调用reloadData即可获得所需的结果。如果不是,则表明您没有正确更新该teamArray