Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.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
Swift 将KVO添加到设置包_Swift_Nsuserdefaults_Key Value Observing - Fatal编程技术网

Swift 将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

我尝试将KVO添加到我的
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(…)
方法。你知道这件事吗?