2014-10-28 7 views
8

Ich erstellte AppGroups und eingerichtet NSUserDefaults mit dieser Gruppe. Ich habe einen Beobachter, für den nicht ausgelöst wird, wenn der Wert geändert wird.Erkennen von Änderungen auf NSUserDefaults mit SuiteName

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

Allerdings, wenn ich die appGroup ignorieren und verwenden NSUserDefaults.standardUserDefaults() es wie erwartet funktioniert. Irgendeine Idee, warum es nicht funktioniert?

+0

ja, komisch ... Beobachter für forKeyPath funktioniert nicht mit suiteName; Die einzige Lösung besteht darin, "global" alle NSUserDefault zu beobachten: NSNotificationCenter.defaultCenter(). addObserver (self, selector: "defaultsChanged_selector", Name: NSUserDefaultsDidChangeNotification, object: nil) – TonyMkenu

+0

Würde dies funktionieren, wenn nsuser standardmäßig extern geändert wird? Wie von einem Widget oder einer anderen App? –

+0

Es funktioniert, Sie können dieses Beispiel auch überprüfen - http://www.glimsoft.com/06/28/ios-8-today-extension-tutorial/ (PS Hello Cluj!: D) – TonyMkenu

Antwort

0

Versuchen Sie, suitename anstelle der Initialisierung hinzuzufügen. Richten Sie eine App-Gruppe ein, wenn Sie die Daten teilen möchten

Verwandte Themen