2013-05-09 149 views
-3

我有一个字符串被分配给一个NSUserDefaults对象,但我需要有代码值改变时运行。我如何使用委托检查NSUserDefaults对象值?如何使用委托检查NSUserDefaults值是否更改?

+0

看着另外一个问题,现在我对Objective-C有了更多的了解,这个问题其实并不重复。另一个问题是询问如何响应NSUserDefaultsDidChangeNotification并获取已更改的值。然而,我不知道有一个NSUserDefaultsDidChangeNotification。 – 2014-03-04 03:24:06

回答

2

嘿,你需要使用KVO (Key Value Observing)NSUserDefaults

注册检查找零志愿用下面的代码

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults addObserver:self forKeyPath:@"YourValue to observer" options:NSKeyValueObservingOptionNew context:NULL]; 

在 '-viewDidDisappear'

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults removeObserver:self forKeyPath:@"YourValue to observer"]; 

删除观察者最后执行以下方法接收KVO通知,

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 
    NSLog(@"Output : %@ changed property %@ to value %@", object, keyPath, change); 
} 
+0

viewDidUnload不再在iOS 6中调用。您应该删除viewDidDisappear或dealloc中的观察者。 – rdelmar 2013-05-09 06:17:42

+0

谢谢,更新了答案 – icodebuster 2013-05-09 06:56:33

+0

虽然问题被标记为重复,但您的答案非常感谢您的简单说明。 – 2013-05-10 02:53:12