我正在使用名为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数据?内容视图控制器需要在加载视图控制器之前先加载数组。任何提示,将不胜感激。
答案 0 :(得分:0)
何时应从Firebase加载数据是设计决定。您说过,内容视图控制器需要在加载视图控制器之前先加载数组,因此您应该在应用程序流中的某个点从Firebase请求数据,这样可以保证请求在返回之前会随数据一起返回您的TableView正在尝试加载该数据。
您可能正在竞争一种竞争状态,您在其中请求数据,然后在请求完成之前转到内容视图控制器。
通常,您不必依赖于保证请求会及时完成的保证,因此我建议您执行@rmaddy建议的操作,在此之前先加载数据,然后再使用某种完成处理程序/通知/委托调用,一旦您要从中提取数据的数组更新,它将在tableView上调用reloadData
。
您所引用的项目样本不能像您正在处理的那样处理异步情况。属性声明中的didSet
只是一个闭包,当您为该属性设置值时将执行该闭包。对于项目示例,新闻类别在视图控制器实例化时设置,然后didSet
执行一次,并附加适当的新闻数组以供tableView访问。同样,在您的情况下,只要在数据从Firebase返回后更新包含表视图数据源的数组,则对tableView调用reloadData
即可获得所需的结果。如果不是,则表明您没有正确更新该teamArray
。