ios - 接收通知而不加载 View

标签 ios swift swift3 viewcontroller nsnotificationcenter

正如我在 question 中所解释的那样,我试图将数据从 TableView 中的 UISwitch 传递到另一个 ViewController。但是,我希望在关闭“设置 View ”(包含 UISwitch)时传递数据。接下来这个伟大的第三步answer ,我使用 UserDefaults 传递数据,并在关闭“设置 View ”时尝试使用 NotificationCenter 更新 UserDefaults 值。

To update when user defaults values change, you could have your Settings controller post a Notification when dismissing. Then, other VCs in your app could listen for this notification and update as needed.

我尝试在 viewDidLoad 中检索通知,但该值不会刷新,因为关闭设置 View 不会每次都加载新的 ViewController。

每次关闭设置 View 时如何接收/阅读通知?更准确地说,我将在哪里以及如何编写用于读取通知的代码?

<小时/>

以下是发布通知的代码:

class SettingsViewController: UIViewController {

@IBAction func doneButton(_ sender: UIButton) {

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

}

以下是检索通知的代码:

    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"
        }

    }

最佳答案

对于此用例,使用通知效果不佳,而且没有必要。我将把开关的值称为 mySetting。

MyViewController(将使用 mySetting 的 View Controller )

  • viewWillAppear(_:) 中的 UserDefaults 读取 mySetting 并使用它

SettingsViewController(包含开关的 View Controller )

  • 从 UserDefaults 中读取 mySetting 并将其分配给 viewWillAppear(_:) 中的开关
  • 当开关上触发 valueChanged 事件时,将 mySetting 写入 UserDefaults

除非您在弹出窗口中显示 SettingsViewController,否则 MyViewController 的 viewWillAppear(_:) 实现将在新加载时以及从任何其他 View Controller 返回时执行。

关于ios - 接收通知而不加载 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42494633/

相关文章:

ios - 向 UITextField 右侧添加文本和图像

ios - Xcode——在 Storyboard中控制+拖动的替代选项,为按钮创建控制转场

ios - 如何使用 NSUserDefaults 获取另一个类中一个类的数组列表数据

ios - 获取核心数据中具有关系的实体

iOS11 用户位置不显示蓝色标记

ios - 从另一个类/方法调用委托(delegate)方法(特别是 didSelectRowAtIndexPath)

ios - 如何避免三种数据库操作中的厄运金字塔?

ios - iOS 5 iCloud Backup 是否使用 UIWebView 的存储来保存应用程序的 webkit 数据?

ios - stackview 和 view 之间的约束失败

ios - 由于 IPv6 问题导致应用被拒绝