sunshinejr / SwiftyUserDefaults

Modern Swift API for NSUserDefaults
http://radex.io/swift/nsuserdefaults/static
MIT License
4.84k stars 364 forks source link

kvo not work #297

Open pmlican opened 1 year ago

pmlican commented 1 year ago

here my example,when click button change usename observe not work, is anything i miss?

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        Defaults.observe(\.username, options: [.initial, .old, .new]) { update in
            print(update)
        }

    }

    @IBAction func click(_ sender: Any) {
        let num = Int.random(in: 0..<10)

        let username = Defaults[\.username]
        Defaults[\.username] = " abc \(num)"
    }
}

extension DefaultsKeys {
    var username: DefaultsKey<String> { .init("username", defaultValue: "default") }

}
developforapple commented 9 months ago

The DefaultsDisposable instance is released, so you can't keep observing. It should be a storage property of the ViewController to prevent it from being released.