观察NSUserDefaults键的值更改

时间:2010-09-03 08:03:55

标签: iphone nsuserdefaults observer-pattern

我对NSUserdefaults中保留的特定键的值更改感兴趣。但是,我所拥有的并不适合我。 observeValueForKeyPath不会被触发。

更新:我想我已经发现了这个问题。

,而不是使用已定义的常量,如果我使用字符串,则会被触发。

[[NSUserDefaults standardUserDefaults] addObserver:self forKeyPath:kSomethingInteresting options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld) context:nil];


}

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context {

 NSLog(@"Defaults changed, %@.%@", object, keyPath);

 if ((object == [NSUserDefaults standardUserDefaults]) && [keyPath isEqualToString:kSomethingInteresting]) {
  NSLog(@"kSomethingInteresting changed in defaults");
 }
}

不理想,但如果我在addOberver行前面加上:

NSString* keyToObserve = kSomethingInteresting;

然后在addObserver行中使用它然后工作。看起来有点繁琐?

1 个答案:

答案 0 :(得分:-1)

因此,我将废弃在此实例中使用已定义的常量,并且在我需要在userdefaults中观察某些内容的所有实例中。很遗憾,因为我喜欢将它们用作关键名称。