【发布时间】:2016-07-20 07:09:18
【问题描述】:
我正在处理两个视图控制器,它们都继承自基本视图控制器
- A_ViewController 类:BaseViewController
- 类 B_ViewController:BaseViewController
这两个 VC 都与我的 firebase 数据库进行了大量交互。所以我想要一个变量来跟踪所有下载的项目,以便这两个 VC 可以访问它而无需再次重新下载文件。
我尝试在 BaseViewController 中放一个变量名,供两个 A、B 类访问
var allPostsDownloaded: [Post]!
所以在 A_VC 下载任何数据之前,它会检查这个 allPostsDownloaded 变量,如果数据存在则从它加载。如果它不存在,我追加到这个变量。所以当切换到B_VC时,同样可以做到,不需要时不重新下载数据。
我没有使用 segue 或 protocal 来传递数据的原因是这两个 VC 与我的数据库交互非常频繁。因此,尝试使用相互数据变量来跟踪事物的位置要干净得多。
但是问题是我
var allPostsDownloaded: [Post]!
每当我在 A 和 B VC(这是选项卡)之间切换时都会被调用。这将导致变量为空并取消初始化。
我想我可以改用全局变量,但这不是一个好习惯?谁能解释为什么当新标签出现时它会被重新调用?以及最好的解决方案。
【问题讨论】:
-
每次加载视图控制器(选项卡)时都会发生这种情况,您正在创建
BaseViewController的新实例,因此是allPostsDownloaded的新实例。您可能应该创建一个单独的类来存储下载信息。然后,您可以将引用(同一个)传递给每个视图控制器,或者您可以创建该类的单例(共享实例)并使用它。 -
答案也很好。谢谢
标签: ios objective-c swift xcode global-variables