如何在视图控制器之间使用共享数据
How to use share data between view controlles
我想在视图之间使用数据,但我有一个标签栏视图控件。实际上我的初始视图登录视图我得到 "access_token" 作为刺痛,如果我可以成功登录传递选项卡栏控件的第一个视图,但我想在第二个选项卡栏视图中使用访问令牌字符串从 web 服务获取另一个数据。如何在选项卡栏控制器的第二个视图中获取访问令牌字符串?
self.strSuccessful = json["acces_token"] as? String
标签栏视图控制器中的第二个视图
class SalesVC: UIViewController {
var strAccesToken: String!
}
我的初始(第一个视图控制器不包含标签栏,因为登录屏幕)
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let salesViewController = segue.destination as! SalesVC
salesViewController.strAccessToken = strSuccessfulAccesToken
}
最简单的解决方案是您可以使用 UserDefaults
并将访问令牌存储在 LoginController
中,然后 SecondTabController
从用户默认设置中检索访问令牌。
在 UserDefaults
中保存访问令牌
UserDefaults.standard.set(strSuccessfulAccesToken, forKey: "AccessToken")
现在 SecondTabController
从用户默认值中检索访问令牌。
if let accessToken = UserDefaults.standard.string(forKey: "AccessToken") {
print(accessToken)
}
如果您想从 LoginController
手动传递访问令牌,请像这样在 LoginController
的 prepareForSegue
中设置访问令牌。
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
}
}
在一般情况下,您可以使用 UserDefaults
来存储简单数据(例如 UI 偏好),但您提到了 访问令牌 ,如果你想保护用户帐户,你应该小心并选择像 Keychain
这样的安全存储。
请记住,UserDefaults
只是一个简单的 XML 文件,任何有权访问设备的人都可以阅读它。
This 是关于安全 iOS 用户数据
的好教程
我想您是在问如何在标签栏控制器内的不同视图控制器之间传输数据。我是这样做的:
定义标签栏 class 和保存数据的变量:
class ItemTabBarController: UITabBarController {
var allTags: [TagData] = []
override func viewDidLoad() {
print("ItemTabBarController.viewDidLoad")
}
}
确保故事板中标签栏的自定义 class 属性 是 "ItemTabBarController"
在每个想要在标签栏中设置值的视图控制器中:
func configureItemTabBarController() {
let itemTabBarController = self.tabBarController as! ItemTabBarController
self.viewModel.allTags = viewModel.configureAllTags()
itemTabBarController.allTags = self.viewModel.allTags
}
我想在视图之间使用数据,但我有一个标签栏视图控件。实际上我的初始视图登录视图我得到 "access_token" 作为刺痛,如果我可以成功登录传递选项卡栏控件的第一个视图,但我想在第二个选项卡栏视图中使用访问令牌字符串从 web 服务获取另一个数据。如何在选项卡栏控制器的第二个视图中获取访问令牌字符串?
self.strSuccessful = json["acces_token"] as? String
标签栏视图控制器中的第二个视图
class SalesVC: UIViewController {
var strAccesToken: String!
}
我的初始(第一个视图控制器不包含标签栏,因为登录屏幕)
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let salesViewController = segue.destination as! SalesVC
salesViewController.strAccessToken = strSuccessfulAccesToken
}
最简单的解决方案是您可以使用 UserDefaults
并将访问令牌存储在 LoginController
中,然后 SecondTabController
从用户默认设置中检索访问令牌。
在 UserDefaults
UserDefaults.standard.set(strSuccessfulAccesToken, forKey: "AccessToken")
现在 SecondTabController
从用户默认值中检索访问令牌。
if let accessToken = UserDefaults.standard.string(forKey: "AccessToken") {
print(accessToken)
}
如果您想从 LoginController
手动传递访问令牌,请像这样在 LoginController
的 prepareForSegue
中设置访问令牌。
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
}
}
在一般情况下,您可以使用 UserDefaults
来存储简单数据(例如 UI 偏好),但您提到了 访问令牌 ,如果你想保护用户帐户,你应该小心并选择像 Keychain
这样的安全存储。
请记住,UserDefaults
只是一个简单的 XML 文件,任何有权访问设备的人都可以阅读它。
This 是关于安全 iOS 用户数据
的好教程我想您是在问如何在标签栏控制器内的不同视图控制器之间传输数据。我是这样做的:
定义标签栏 class 和保存数据的变量:
class ItemTabBarController: UITabBarController {
var allTags: [TagData] = []
override func viewDidLoad() {
print("ItemTabBarController.viewDidLoad")
}
}
确保故事板中标签栏的自定义 class 属性 是 "ItemTabBarController"
在每个想要在标签栏中设置值的视图控制器中:
func configureItemTabBarController() {
let itemTabBarController = self.tabBarController as! ItemTabBarController
self.viewModel.allTags = viewModel.configureAllTags()
itemTabBarController.allTags = self.viewModel.allTags
}