Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用suiteName检测NSUserDefaults上的更改_Ios_Swift_Nsuserdefaults - Fatal编程技术网

Ios 使用suiteName检测NSUserDefaults上的更改

Ios 使用suiteName检测NSUserDefaults上的更改,ios,swift,nsuserdefaults,Ios,Swift,Nsuserdefaults,我创建了appGroups,并使用该组设置了一个NSUserDefaults。我有一个观察者,其值更改时不会触发 let defaults = NSUserDefaults(suiteName: "group.daniesy.text")! defaults.addObserver(self, forKeyPath: "temp", options: NSKeyValueObservingOptions.New, context: nil) defaults.setBoo

我创建了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")
}
let defaults=NSUserDefaults(suiteName:“group.daniesy.text”)!
defaults.addObserver(self,forKeyPath:“temp”,选项:NSKeyValueObservingOptions.New,上下文:nil)
defaults.setBool(!defaults.boolForKey(“temp”),forKey:“temp”)
defaults.synchronize()
重写func observeValueForKeyPath(键路径:字符串,对象对象:AnyObject,更改:[NSObject:AnyObject],上下文:UnsafeMutablePointer){
println(“变更”)
}
但是,如果我忽略appGroup并使用
NSUserDefaults.standardUserDefaults()
它会按预期工作。
知道它为什么不工作吗?

尝试添加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")
}
let defaults=NSUserDefaults.standardUserDefaults()
defaults.addSuiteName(“group.daniesy.text”)
defaults.addObserver(self,forKeyPath:“temp”,选项:NSKeyValueObservingOptions.New,上下文:nil)
defaults.setBool(!defaults.boolForKey(“temp”),forKey:“temp”)
defaults.synchronize()
重写func observeValueForKeyPath(键路径:字符串,对象对象:AnyObject,更改:[NSObject:AnyObject],上下文:UnsafeMutablePointer){
println(“变更”)
}
macOS 10.12和iOS 10的基础发行说明

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


是的,很奇怪。。。forKeyPath的观察者它不使用suiteName;唯一的解决方案是“全局”观察所有NSUserDefault:NSNotificationCenter.defaultCenter().addObserver(self,selector:“defaultsChanged_selector”,name:NSUserDefaultsDidChangeNotification,object:nil)在外部更改nsuser默认值时,这是否有效?就像来自小部件或其他应用程序一样?它正在工作,你也可以检查这个示例-(PS Hello Cluj!:D)数据共享确实有效,我需要观察者来工作。您好BuuReStI:D:):随着iOS 10和MACOS 10.12的发布,基金会发布注意到…键值观察和NSUserDefaults-在早期版本中,KVO只能用于由+standardUserDefaults方法返回的NSUserDefaults实例。。。。这些限制都已被纠正。它工作正常