使用suiteName检测NSUserDefaults上的更改

Dăn*_*ian 10 nsuserdefaults ios swift

我创建了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")
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我忽略appGroup并使用NSUserDefaults.standardUserDefaults()它按预期工作.知道为什么它不起作用吗?

kar*_*agu 2

尝试添加 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")
}
Run Code Online (Sandbox Code Playgroud)