如何在视图控件之间使用共享数据

时间:2017-05-19 09:23:34

标签: swift uitabbarcontroller pass-data

我想在视图之间使用数据,但我有一个标签栏视图控件。实际上我的初始视图登录视图我得到“access_token”作为一个刺痛,如果我可以成功登录通过标签栏控件的第一个视图,但我想在第二个标签栏视图中使用访问令牌字符串从webservice获取另一个数据。如何在标签栏控制器的第二个视图中获取访问标记字符串?

self.strSuccessful = json["acces_token"] as? String

我在标签栏视图控制器中的第二个视图

class SalesVC: UIViewController {
   var strAccesToken: String!
  }

我的初始(第一个视图控制器不包含tabbar,因为登录屏幕)

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    let salesViewController = segue.destination as! SalesVC

    salesViewController.strAccessToken = strSuccessfulAccesToken


}

3 个答案:

答案 0 :(得分:0)

最简单的解决方案是,您可以使用SecondTabController并在UserDefaults之后将访问令牌存储在UserDefaults.standard.set(strSuccessfulAccesToken, forKey: "AccessToken") 中,从用户默认值中检索访问令牌。

SecondTabController

中保存访问令牌
if let accessToken =  UserDefaults.standard.string(forKey: "AccessToken") {
    print(accessToken)
}

现在在LoginController中从用户默认值中检索访问令牌。

prepareForSegue

如果您想从LoginController手动传递访问令牌,请像override func prepare(for segue: UIStoryboardSegue, sender: Any?) { let tabbar = segue.destination as! UITabBarController if let salesVC = tabbar.viewControllers[1] as? SalesVC { salesVC.strAccessToken = strSuccessfulAccesToken } } {{1}}这样设置访问令牌。

{{1}}

答案 1 :(得分:0)

一般情况下,您可以使用UserDefaults来存储简单数据(例如,UI首选项),但您已经提到了访问令牌,如果您想保护用户帐户,你应该小心并选择像Keychain这样的安全存储空间。

请记住,UserDefaults只是简单的XML文件,任何有权访问设备的人都可以阅读它。

This是关于安全iOS用户数据的好教程

答案 2 :(得分:0)

我认为您在询问如何在标签栏控制器中的不同视图控制器之间传输数据。这就是我做到的:

定义标签栏类和变量以保存数据:

class ItemTabBarController: UITabBarController {
    var allTags: [TagData] = []

    override func viewDidLoad() {
        print("ItemTabBarController.viewDidLoad")
    }
}

确保故事板中标签栏的自定义类属性为“ItemTabBarController”

在每个想要在标签栏中设置值的视图控制器中:

func configureItemTabBarController() {
        let itemTabBarController = self.tabBarController  as! ItemTabBarController
        self.viewModel.allTags = viewModel.configureAllTags()
        itemTabBarController.allTags = self.viewModel.allTags
    }