2014-09-24 2 views
1

Я попытался добавить KVO в свой NSUserDefaults, чтобы посмотреть изменение значения в настройках. Я добавил точку останова для своего метода observeValueForKeyPath:object:change:context, но он никогда не вызывался.Добавление KVO в набор настроек

Вот мой код:

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)") 
} 

ответ

2

Следующий код может помочь вам построить ваш КВО:

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() 
    } 

} 
+0

'инициализации (SuiteName)' 'инициализатор NSUserDefaults' используется для инициализации' NSUserDefault' и сделать тот же код, который даже не выполняет метод «observValueForKeyPath (...)» в устройстве. У вас есть представление об этом? – Rafeek

Смежные вопросы