2017-02-27 3 views
0

question에서 설명한 것처럼 TableView의 UISwitch에서 다른 ViewController로 데이터를 전달하려고합니다. 그러나 UISwitch가 포함 된 설정보기를 닫을 때 데이터가 전달되기를 원합니다. 이 위대한 answer의 세 번째 단계를 수행 한 후, UserDefaults를 사용하여 데이터를 전달하고 SettingsCenter를 사용하여 Settings보기를 닫을 때 UserDefaults 값을 업데이트하려고합니다.뷰를로드하지 않고 알림 받기

사용자 기본값이 변경 될 때 업데이트하려면 설정 컨트롤러가 해지 할 때 알림을 게시하도록 설정할 수 있습니다. 그런 다음 앱의 다른 VC가이 알림을 수신하고 필요에 따라 업데이트 할 수 있습니다.

내가있는 viewDidLoad 내부의 통지를 검색 해봤지만, 설정보기를 기각하는 것은 새의 ViewController 매번를로드하지 않기 때문에 값이 갱신되지 않습니다.

설정보기를 닫을 때마다 알림을 받거나 읽는 방법은 무엇입니까? 보다 정확하게, 통지를 읽는 코드를 어디에 그리고 어떻게 써야할까요? ,

class ViewController: UIViewController { 

    @IBOutlet weak var testLabel: UILabel!  
    var savedValue = UserDefaults.standard.bool(forKey: "sound") 


    override func viewDidLoad() { 
     super.viewDidLoad() 

    NotificationCenter.default.addObserver(self, selector: #selector(ViewController.viewDidLoad), name: Notification.Name("nSound"), object: nil) 

//refresh the savedValue variable  
     savedValue = UserDefaults.standard.bool(forKey: "sound") 

//test the savedValue variable 
     if (savedValue == true) { 
      testLabel.text = "yes" 
     } else { 
      testLabel.text = "no" 
     } 

    } 
+0

설정 컨트롤러가 다른 VC가 알림을받을 수있는시기를 추측하려고하는 것이 아니라 다른 VC가 필요할 때 데이터 모델에 요청하는 방법은 어떻습니까? ...'viewDidAppear' /'viewWillAppear'이 가능한 후보입니다. –

+0

이미 viewDidAppear에서 알림을 수신하려고 시도했습니다. 그러나 이전과 마찬가지로보기가 매번 나타나지 않거나로드되지 않습니다. 언제나 배경에 있습니다. – Gabe12

+0

"데이터 모델에 요청하십시오"는 "알림을받지 못했습니다."라고 말했습니다. 아마도 VC는 화면을 업데이트하는 지점에서 데이터 만 필요로합니다. –

답변

0

사용 알림이 사용 사례 아주 잘 작동하지 않습니다 여기에 통지를 검색하기위한 코드입니다

class SettingsViewController: UIViewController { 

@IBAction func doneButton(_ sender: UIButton) { 

    self.dismiss(animated: true, completion: nil) 
    NotificationCenter.default.post(name: Notification.Name("nSound"), object: nil) 

} 

:


여기에 통지를 게시하는 코드이다 그것은 필요하지 않습니다. 스위치의 값을 mySetting이라고합니다.

MyViewController (mySetting를 사용 뷰 컨트롤러) viewWillAppear(_:)에 UserDefaults에서

  • 판독 mySetting을 사용할 것이

SettingsViewController (스위치를 포함하는 뷰 컨트롤러)

  • 읽기

당신이 팝 오버에 존재 SettingsViewController, MyViewController의 viewWillAppear(_:) 구현이 때 실행될하지 않는 한 valueChanged 이벤트는 스위치 트리거 될 때 UserDefaults에서 mySetting 및 UserDefaults에 viewWillAppear(_:)

  • 쓰기 mySetting에 스위치에 할당 다른 뷰 컨트롤러에서 다시로드 할 때뿐만 아니라 새로로드됩니다.

  • 0

    설정보기를 닫을 때마다 savedValue 변수가 자동으로 새로 고침되지 않았습니다. 이는 다른 ViewController가 매번 자체를로드하지 않았기 때문입니다. 내가 한 것은 알림이 호출 될 때 실행되는 새로운 기능 (설정보기를 닫을 때)을 작성한 것입니다.여기에 코드입니다 : addObserver 이제 기능 retrieveValue()를 호출

    class ViewController: UIViewController { 
    
    @IBOutlet weak var testLabel: UILabel!  
    var savedValue = UserDefaults.standard.bool(forKey: "sound") 
    
    
    override func viewDidLoad() { 
         super.viewDidLoad() 
    
        NotificationCenter.default.addObserver(self, selector: #selector(ViewController.retrieveValue), name: Notification.Name("nSound"), object: nil) 
    
    //For when the view appears the first time 
        savedValue = UserDefaults.standard.bool(forKey: "sound") 
    
        if (savedValue == true) { 
         testLabel.text = "yes" 
        } else { 
         testLabel.text = "no" 
        } 
    
    } 
    
    func retrieveValue() { 
    
    //refresh the savedValue variable  
          savedValue = UserDefaults.standard.bool(forKey: "sound") 
    
    //test the savedValue variable 
          if (savedValue == true) { 
           testLabel.text = "yes" 
          } else { 
           testLabel.text = "no" 
          } 
    
        } 
    

    있다.