2014-10-28 104 views
8

我創建了appGroups,並且使用該組設置了NSUserDefaults。我有一個觀察者,當值被改變時它不會被觸發。使用suiteName檢測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

yes,weird ... forKeyPath觀察員它不適用於suiteName;唯一的解決辦法是觀察員「全局」所有的NSUserDefault:NSNotificationCenter.defaultCenter()。addObserver(self,selector:「defaultsChanged_selector」,名稱:NSUserDefaultsDidChangeNotification,object:nil) – TonyMkenu 2014-10-28 10:10:10

+0

當外部更改nsuser默認值時,這樣做會工作嗎?像從一個小部件或其他應用程序? – 2014-10-28 13:40:20

+0

它的工作,你也可以檢查這個例子 - http://www.glimsoft.com/06/28/ios-8-today-extension-tutorial/(PS Hello Cluj!:D) – TonyMkenu 2014-10-28 14:30:37

回答

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