2013-05-09 155 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