我创建了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()
,它会按预期工作。
知道为什么它不能正常工作吗?
答案 0 :(得分:1)
键值观察和NSUserDefaults
在以前的版本中,只能在+ standardUserDefaults方法返回的NSUserDefaults实例上使用KVO。此外,KVO忽略了来自其他进程的更改(例如defaults(1),扩展名或应用程序组中的其他应用程序)。这些限制都已得到纠正。来自其他进程的更改将在主队列上异步传递,并且忽略NSKeyValueObservingOptionPrior。
答案 1 :(得分:0)
尝试添加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")
}