2017-11-30 88 views
0

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을 가져 와서 설정합니다 스위치가 올바른 상태로 전환됩니다.

답변

2

UserDefaults.standard.bool(forKey: key)으로 문제가 있다고 판단 할 수 없습니다. UserDefaults.standard.object(forKey: key)Any?을 반환하므로이를 사용하여 nil 등을 테스트 할 수 있습니다.

extension UserDefaults { 

    static func exists(key: String) -> Bool { 
     return UserDefaults.standard.object(forKey: key) != nil 
    } 

} 
+0

그래서이 함수는 키가 존재하면 true를 반환하고 그렇지 않으면 false를 반환합니다. 맞습니까? 그래서 그럴 경우 나는 거짓을 얻었고 값을 저장하고 UISwitch를 올바르게 설정하기위한 키가 존재하지 않는다면 성명서를 쓸 수 있었습니까? – RjC

+1

첫 번째 질문에 맞춰서 두 번째 질문을 따르지 않았습니다. 'switchParallax_tapped()'메소드에서'if' 문을 제거하고'defaults.set (sender.isOn, forKey : "parallax")'를 사용할 수도 있습니다. – Norman

+0

고마워요. 이거 좀 작동하고 UserDefaults를 설정하는 짧은 방법이 정말 좋지만 다음에로드되지 않은 이유가 있습니다. 이것은 내가하는 것입니다 :'parallax = UserDefaults.exists (key : "parallax")'그리고 이것이 true (key가 존재한다면)를 반환한다는 것을 이해하고 있기 때문에 그렇지 않다면'if parallax == false { false (키가 존재하지 않음)이면 올바르게 설정하고 스위치를 설정합니다 :'switchParallax.setOn (parallax, animated : true)'default.set (true, forKey : "parallax") } . 그러나 뷰가로드 될 때 항상 참이됩니다. – RjC