我创建了appGroups,并使用该组设置了一个NSUserDefaults。我有一个观察者,当值改变时它不会被触发。
let defaults = NSUserDefaults(suiteName: "group.daniesy.text")!
defaults.addObserver(self, forKeyPath: "temp", options: NSKeyValueObservingOptions.New, context: nil)
defaults.setBool(!defaults.boolForKey("temp"), forKey: "temp")
defaults.synchronize()
override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) {
println("changed")
}但是,如果我忽略appGroup并使用NSUserDefaults.standardUserDefaults(),它将按预期工作。你知道为什么它不工作吗?
发布于 2019-08-28 15:09:38
macOS 10.12和iOS 10的基础版本说明
键值观测与NSUserDefaults
在以前的版本中,KVO只能在+standardUserDefaults方法返回的NSUserDefaults实例上使用。此外,来自其他进程的更改(例如默认值(1)、扩展或应用程序组中的其他应用程序)会被KVO忽略。这些限制都得到了纠正。来自其他进程的更改将在主队列上异步传递,并忽略NSKeyValueObservingOptionPrior.
发布于 2015-06-01 15:21:02
尝试添加suitename而不是初始化。如果要共享数据,请设置应用程序组
let defaults = NSUserDefaults.standardUserDefaults()
defaults.addSuiteNamed("group.daniesy.text")
defaults.addObserver(self, forKeyPath: "temp", options: NSKeyValueObservingOptions.New, context: nil)
defaults.setBool(!defaults.boolForKey("temp"), forKey: "temp")
defaults.synchronize()
override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) {
println("changed")
}https://stackoverflow.com/questions/26599465
复制相似问题