如何接收NSUserDefaultsDidChangeNotification iphone

neh*_*eha 23 iphone nsuserdefaults

经过大量的搜索后,我无法找到你需要将字典对象传递给:

[NSUserDefaultsDidChangeNotification addObserver: forKeyPath: options: context:];
Run Code Online (Sandbox Code Playgroud)

如果我想在userDefaults中进行一次更改,我应该在选项中提供什么.还有什么是keypath?

Thanx提前.

dea*_*rne 66

NSUserDefaultsDidChangeNotification只是在更改默认值时发出的通知.要听取它,你需要这个代码:

    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
    [center addObserver:self
               selector:@selector(defaultsChanged:)  
                   name:NSUserDefaultsDidChangeNotification
                 object:nil];
Run Code Online (Sandbox Code Playgroud)

这将调用方法defaultsChanged:触发通知时.您需要像这样实现此方法:

- (void)defaultsChanged:(NSNotification *)notification {
    // Get the user defaults
    NSUserDefaults *defaults = (NSUserDefaults *)[notification object];

    // Do something with it
    NSLog(@"%@", [defaults objectForKey:@"nameOfThingIAmInterestedIn"]);
}
Run Code Online (Sandbox Code Playgroud)

  • 在dealloc方法中删除观察者很重要.如果仍然将已销毁的类注册为观察者,则应用程序将在收到通知时崩溃.使用:[[NSNotificationCenter defaultCenter] removeObserver:self]; (13认同)
  • @deanWombourne有没有办法知道哪些用户默认值已更改? (10认同)