首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用suiteName检测NSUserDefaults上的更改

使用suiteName检测NSUserDefaults上的更改
EN

Stack Overflow用户
提问于 2014-10-28 09:21:05
回答 2查看 4.3K关注 0票数 13

我创建了appGroups,并使用该组设置了一个NSUserDefaults。我有一个观察者,当值改变时它不会被触发。

代码语言:javascript
复制
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(),它将按预期工作。你知道为什么它不工作吗?

EN

回答 2

Stack Overflow用户

发布于 2019-08-28 15:09:38

macOS 10.12和iOS 10的基础版本说明

https://developer.apple.com/library/archive/releasenotes/Miscellaneous/RN-Foundation-OSX10.12/index.html

键值观测与NSUserDefaults

在以前的版本中,KVO只能在+standardUserDefaults方法返回的NSUserDefaults实例上使用。此外,来自其他进程的更改(例如默认值(1)、扩展或应用程序组中的其他应用程序)会被KVO忽略。这些限制都得到了纠正。来自其他进程的更改将在主队列上异步传递,并忽略NSKeyValueObservingOptionPrior.

票数 3
EN

Stack Overflow用户

发布于 2015-06-01 15:21:02

尝试添加suitename而不是初始化。如果要共享数据,请设置应用程序组

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26599465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档