UserDefaults 키가 있는지 확인하고 표준 값을 선택하지 않았 으면 스택 오버플로에 대한 대답으로이 작업을 수행하는 데 도움이되지 않습니다.Swift : UserDefaults가 있는지 확인하고 선택한 표준 값을 저장하지 않는 경우 어떻게 확인합니까?
본질적으로 나는 두 개의 UISwitches를 가지고 있는데, 하나는 켜져 있고 나머지는 처음부터 꺼져 있습니다. 이제 내 문제는 viewController로드 될 때 이러한 초기 상태를 UserDefaults로 저장하는 방법을 모르고 그 키가 존재하지 않는다는 것입니다.
이것은 UISwitch의 키가 존재하는지 확인하려고 시도한 것이고 true로 설정하지 않은 경우 (내가 원하는 상태이기 때문에) 다음 키의 bool이 무엇인지 다시 확인하고 그것에 UISwitch (이것이의 ViewController 다른 시간을 열 때 본질적으로 중요하다) :
func setupSwitches() {
let defaults = UserDefaults.standard
//check if the key exists
if !defaults.bool(forKey: "parallax") {
switchParallax.setOn(true, animated: true)
}
//check for the key and set the UISwitch
if defaults.bool(forKey: "parallax") {
switchParallax.setOn(true, animated: true)
} else {
switchParallax.setOn(false, animated: true)
}
}
사용자가 나는이 같은 UserDefaults 키 설정 해당 버튼을 누르면
:@IBAction func switchParallax_tapped(_ sender: UISwitch) {
let defaults = UserDefaults.standard
if sender.isOn == true {
defaults.set(true, forKey: "parallax")
} else {
defaults.set(false, forKey: "parallax")
}
}
이것은 분명히하고있다 , 문제는 위의 첫 번째 코드에 있습니다.
우선, 나는 그것이 존재하는지 확인하지 않고 "true"로 설정하지 않고 setupSwitches() 함수를 호출하므로 viewController가 나타날 때마다 실행됩니다.
따라서 메모리 문제로 인해 키가 있는지 확인하는 것이 더 좋은 방법인지는 모르겠지만 실제로 설정되어 있지 않으면 UserDefaults에서 bool을 가져 와서 설정합니다 스위치가 올바른 상태로 전환됩니다.
그래서이 함수는 키가 존재하면 true를 반환하고 그렇지 않으면 false를 반환합니다. 맞습니까? 그래서 그럴 경우 나는 거짓을 얻었고 값을 저장하고 UISwitch를 올바르게 설정하기위한 키가 존재하지 않는다면 성명서를 쓸 수 있었습니까? – RjC
첫 번째 질문에 맞춰서 두 번째 질문을 따르지 않았습니다. 'switchParallax_tapped()'메소드에서'if' 문을 제거하고'defaults.set (sender.isOn, forKey : "parallax")'를 사용할 수도 있습니다. – Norman
고마워요. 이거 좀 작동하고 UserDefaults를 설정하는 짧은 방법이 정말 좋지만 다음에로드되지 않은 이유가 있습니다. 이것은 내가하는 것입니다 :'parallax = UserDefaults.exists (key : "parallax")'그리고 이것이 true (key가 존재한다면)를 반환한다는 것을 이해하고 있기 때문에 그렇지 않다면'if parallax == false { false (키가 존재하지 않음)이면 올바르게 설정하고 스위치를 설정합니다 :'switchParallax.setOn (parallax, animated : true)'default.set (true, forKey : "parallax") } . 그러나 뷰가로드 될 때 항상 참이됩니다. – RjC