gpt4 book ai didi

objective-c - NSUserDefaultsDidChangeNotification : What's the name Of the Key, 已更改?

转载 作者:可可西里 更新时间:2023-11-01 03:02:07 26 4
gpt4 key购买 nike

当 UserDefaults 中的某些值更改时,此代码将调用方法“defaultsChanged”

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

此代码将给我更改的值

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

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

但是我怎样才能得到 key 的名称,它已经改变了??

最佳答案

正如其他人所说,无法从 NSUserDefaultsDidChange 通知中获取有关已更改 key 的信息。但是没有必要复制任何内容并自己检查,因为有 Key Value Observing (KVO) 也适用于 NSUserDefaults,如果您需要特别通知某些属性:

首先,注册 KVO 而不是使用 NotificationCenter:

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

不要忘记删除观察(例如在 viewDidUnload 或 dealloc 中)

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults removeObserver:self forKeyPath:@"nameOfThingIAmInterestedIn"];

最后实现这个方法接收KVO通知

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

关于objective-c - NSUserDefaultsDidChangeNotification : What's the name Of the Key, 已更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10871860/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com