Обнаруживать изменения в NSUserDefaults с именем packageName
Я создал 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()
, он работает как положено.
Есть идеи, почему это не работает?
Ответы
Ответ 1
Попробуйте добавить имя пользователя вместо инициализации. Настройте группу приложений, если вы хотите поделиться данными
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")
}
Ответ 2
Замечания по выпуску Foundation для MacOS 10.12 и iOS 10
https://developer.apple.com/library/archive/releasenotes/Miscellaneous/RN-Foundation-OSX10.12/index.html
Наблюдение значения ключа и NSUserDefaults
В предыдущих выпусках KVO можно было использовать только для экземпляра NSUserDefaults, возвращенного методом +standardUserDefaults. Кроме того, KVO игнорировала изменения других процессов (таких как настройки по умолчанию (1), расширения или другие приложения в группе приложений). Эти ограничения были оба исправлены. Изменения из других процессов будут доставляться асинхронно в основную очередь и игнорировать NSKeyValueObservingOptionPrior.