cocoa – Notificação na alteração do valor NSUserDefaults?

Digamos que eu tenha uma chave @ “MyPreference”, com um valor correspondente armazenado por meio de NSUserDefaults.

Existe uma maneira de ser notificado quando o valor é modificado?

Ou poderia ser feito através de ligações? (Mas neste caso, em vez de vincular o valor a um elemento de interface do usuário, desejo que meu object seja notificado da alteração, para que eu possa executar outras tarefas.)

Estou ciente de que NSUserDefaultsDidChangeNotification pode ser Observado, mas isso parece ser uma abordagem de tudo ou nada, e não parece haver um mecanismo para chegar ao par de valor-chave específico que foi modificado. (Sinta-se à vontade para corrigir.)

Passamos o dia todo procurando a resposta, só para descobrir 10 minutos depois de fazer a pergunta …

Veio através de uma solução através do Key-Value-Observing:

[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeyPath:@"values.MyPreference" options:NSKeyValueObservingOptionNew context:NULL]; 

Ou, mais simplesmente (por comentário abaixo):

 [[NSUserDefaults standardUserDefaults] addObserver:self forKeyPath:@"MyPreference" options:NSKeyValueObservingOptionNew context:NULL]; 

Rápido:

 override func viewDidLoad() { super.viewDidLoad() NSUserDefaults.standardUserDefaults().addObserver(self, forKeyPath: "THE KEY", options: NSKeyValueObservingOptions.New, context: nil) } override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer) { // your logic } deinit { NSUserDefaults.standardUserDefaults().removeObserver(self, forKeyPath: "THE KEY") } 

E o funcionário da Apple aconselhou a usar a notificação NSUserDefaultsDidChangeNotification aqui: https://devforums.apple.com/message/237718#237718

Eu concordo com @DenNukem. Eu estava usando o NSKeyValueObservingOptionNew. Mas esta function começou a me dar o erro BADACCESS Code = 1 sempre que eu usei o NSUserdefault para salvar outros objects. Caso você esteja usando o Key Value Observer, esteja ciente do problema de zumbis em NSUserDefaults.

Aqui está o link para a solução: problemas de NSUserDefaults e KVO