我想在视图之间使用数据,但我有一个标签栏视图控件。实际上我的初始视图登录视图我得到“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
}
答案 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
}