我想从此视图控制器获取用户设置详细信息,并将这些详细信息读取到上一个视图控制器。我尝试了很多不同的方法,但在访问此视图控制器之前我无法获取值
尝试了第一种方法此方法也无效。我认为这很简单,但我无法找到正确的方法。
class SetConvViewController: UIViewController {
var engS = "engS"
@IBOutlet weak var swithEnglish: UISwitch!
override func viewDidLoad() {
super.viewDidLoad()
if let eng2 = defaults.value(forKey: engS)
{
swithEnglish.isOn = eng2 as! Bool
}
}
let defaults = UserDefaults.standard
@IBAction func switchEng(_ sender: UISwitch) {
defaults.set(sender.isOn, forKey: engS)
}
}
答案 0 :(得分:1)
如果我从这一部分正确地理解你 - “但是在我访问这个视图控制器之前我无法获取值” - 你的问题在于,在你访问你的设置之前,{{1}没有任何价值。 }}。
如果您使用UserDefaults
方法阅读它们,我建议您切换到使用getObject(forKey:)
,因为它将返回getBool(forKey:)
,即使尚未为该键设置该值( docs)
无论如何,如果你想设置一些默认/初始值,你可以在false
中的didFinishLaunching
方法中设置:
AppDelegate
我在你的代码中也注意到你使用了if UserDefaults.standard.object(forKey: „engS”) == nil {
// the value has not been set yet, assign a default value
}
- 你不应该在value(forKey:)
上这样做 - 这是一个很好的答案,为什么 - What is the difference between object(forKey:) and value(forKey:) in UserDefaults?。
另外,如果您是第一次使用iOS SDK中的类,我强烈建议您查看其文档 - 它们写得很好,并且会为您提供有关可能性的一般理解。
答案 1 :(得分:0)
我建议您将这种数据存储为某个对象中的静态字段,以便能够从任何地方读取它。 e.g。
class AppController{
static var userDefaults = UserDefaults.standard
}
然后你可以将它保存在SetConvViewController中,如
@IBAction func switchEng(_ sender: UISwitch) {
AppController.userDefaults.set(sender.isOn, forKey: engS)
}
然后你可以通过调用
从任何其他视图控制器中读取它AppController.userDefaults
答案 2 :(得分:0)
使用segues,您可以设置为任何目的地,无论是下一个vc还是上一个:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "PreviousVC" {
if let prevVC = segue.destination as? PreviousViewController {
//Your previous vc should have your storage variable.
prevVC.value = self.value
}
}
如果您要呈现视图控制器:
目的地vc:
//If using storyboard...
let destVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "DestinationViewController") as! DestinationViewController
destVC.value = self.value
self.present(destVC, animated: true, completion: nil)
上一个vc:
weak var prevVC = self.presentingViewController as? PreviousViewController
if let prevVC = prevVC {
prevVC.value = self.value
}