Swift 将KVO添加到设置包
我尝试将KVO添加到我的Swift 将KVO添加到设置包,swift,nsuserdefaults,key-value-observing,Swift,Nsuserdefaults,Key Value Observing,我尝试将KVO添加到我的NSUserDefaults,以观察设置中的值是否发生变化。我已经在我的observeValueForKeyPath:object:change:context方法中添加了一个断点,但从未调用它 这是我的密码: override init() { super.init() NSUserDefaults.standardUserDefaults().addObserver(self, forKeyPath: UserWantsUbiquityPrefere
NSUserDefaults
,以观察设置中的值是否发生变化。我已经在我的observeValueForKeyPath:object:change:context
方法中添加了一个断点,但从未调用它
这是我的密码:
override init() {
super.init()
NSUserDefaults.standardUserDefaults().addObserver(self, forKeyPath: UserWantsUbiquityPreferenceKey, options: NSKeyValueObservingOptions.New, context: nil)
}
override func observeValueForKeyPath(keyPath: String!, ofObject object: AnyObject!, change: [NSObject : AnyObject]!, context: UnsafeMutablePointer<Void>) {
println("\(keyPath) changed to \(object)")
}
override init(){
super.init()
NSUserDefaults.standardUserDefaults().addObserver(self,forKeyPath:UserWantSubquityPreferenceKey,选项:NSKeyValueObservingOptions.New,上下文:nil)
}
重写func observeValueForKeyPath(键路径:String!,对象对象:AnyObject!,更改:[NSObject:AnyObject]!,上下文:UnsafeMutablePointer){
println(“\(键路径)更改为\(对象)”)
}
以下代码可能有助于您构建KVO:
import UIKit
//observer's context
private var defaultsContext = 0
class ViewController: UIViewController {
let defaults = NSUserDefaults.standardUserDefaults()
@IBAction func changeDefaults(sender: AnyObject) {
//Toggle myPref value (true/false)
defaults.setBool(!defaults.boolForKey("myPref"), forKey: "myPref")
defaults.synchronize()
}
override func viewDidLoad() {
super.viewDidLoad()
//Add observer
defaults.addObserver(self, forKeyPath: "myPref", options: NSKeyValueObservingOptions(), context: &defaultsContext)
}
//Observe changes
override func observeValueForKeyPath(keyPath: String!, ofObject object: AnyObject!, change: [NSObject : AnyObject]!, context: UnsafeMutablePointer<Void>) {
if context == &defaultsContext {
seeUpdate()
} else {
super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context)
}
}
//React to changes
func seeUpdate() {
println(defaults.boolForKey("myPref"))
}
deinit {
//Remove observer
defaults.removeObserver(self, forKeyPath: "myPref", context: &defaultsContext)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
导入UIKit
//观察者的语境
私有变量defaultsContext=0
类ViewController:UIViewController{
让defaults=NSUserDefaults.standardUserDefaults()
@iAction func changeDefaults(发件人:AnyObject){
//切换myPref值(真/假)
defaults.setBool(!defaults.boolforky(“myPref”),forKey:“myPref”)
defaults.synchronize()
}
重写func viewDidLoad(){
super.viewDidLoad()
//添加观察者
addObserver(self,forKeyPath:“myPref”,选项:NSKeyValueObservingOptions(),上下文:&defaultsContext)
}
//观察变化
重写func observeValueForKeyPath(键路径:String!,对象对象:AnyObject!,更改:[NSObject:AnyObject]!,上下文:UnsafeMutablePointer){
如果上下文==&默认上下文{
请参阅更新()
}否则{
super.observeValueForKeyPath(键路径,of对象:object,change:change,context:context)
}
}
//对变化作出反应
func seeUpdate(){
println(默认值为.boolforky(“myPref”))
}
脱硝{
//移除观察者
defaults.removeObserver(self,forKeyPath:“myPref”,context:&defaultsContext)
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
}
}
init(suiteName)
用于初始化NSUserDefaults
并执行相同代码的NSUserDefaults的初始值设定项,它甚至不在设备中执行observeValueForKeyPath(…)
方法。你知道这件事吗?