Xcode的两个选项卡之间的共享变量

时间:2016-07-20 07:09:19

标签: ios objective-c swift xcode global-variables

我有两个我正在处理的视图控制器,它们都从Base视图控制器继承

  1. class A_ViewController:BaseViewController
  2. class B_ViewController:BaseViewController
  3. 这两个VC都与我的firebase数据库进行了很大的交互。所以我想要一个变量来跟踪所有下载的项目,这样两个VC就可以访问它而无需再次重新下载文件。

    我试图在BaseViewController中放置一个变量名,以便两个A,B类访问

        var allPostsDownloaded:  [Post]!
    

    因此,在A_VC下载任何数据之前,它会检查此allPostsDownloaded变量并在数据存在时从中加载。如果它不存在,我追加到这个变量。因此,当切换到B_VC时,可以完成相同的操作,并且在不需要时不会重新下载数据。

    我没有使用segue或protocal传递数据的原因是两个VC与我的数据库交互得非常重要。因此,尝试使用可变数据变得更加清晰,以便跟踪事物的位置。

    然而,问题在于我

    var allPostsDownloaded:  [Post]!
    
    每当我在A和B VC(哪些是标签符号)之间切换时,都会调用

    。这将导致变量为空并取消初始化。

    我想我可以使用全局变量,但这不是一个好习惯吗?任何人都可以解释为什么在新标签出现时重新调用它?对此最好的解决方案。

2 个答案:

答案 0 :(得分:2)

正如@avi提到的创建新的单例类,然后你可以轻松传递和阅读。以下是一个例子

class PersistentData
{
    static let sharedInstance = PersistentData()

    // your global persistent variable
    var allPostsDownloaded = [Post]()
}

因此,在您的控制器中,您可以简单地阅读和设置如下

// read
print(PersistentData.sharedInstance.allPostsDownloaded)

// set new data. this just example, hence depends on your case
PersistentData.sharedInstance.allPostsDownloaded.append(newPost)
PersistentData.sharedInstance.allPostsDownloaded = posts

另请注意,如果您想在标签之间切换时阅读新值,可以在viewDidAppearviewWillAppear

中获取更新

答案 1 :(得分:1)

您可以使用实例变量创建Singleton类,并且可以保存所有下载的数据,并且可以从项目类的任何位置访问singleton类变量。