如何在 Objective-C 应用程序中观察 NSUserDefaults 的命令行更改



我希望我的Cocoa Objective-C应用程序观察NSUserDefaults更改,这些更改是命令行调用默认值写入的结果,例如:

defaults write <domain> <key> -array val1 val2 val3

我已经倾注了许多关于观察NSUserDefaults变化的例子。 看起来通知已发出,因为它们仅在相同的进程中工作。 要观察命令行更改,我认为需要 KVO。

在我看到的 KVO 示例中,我不清楚如何将"默认值写入......"中使用的"域"和"键"参数相关联。对用于观察这些更改的 KVO 逻辑的编程构造的命令行调用。

一个简洁、具体的可运行示例,其中包含代码和关联的"默认值写入..."命令将不胜感激!

这就像KVO对默认值进行任何其他更改一样。

假设你的应用具有 your.company.app CFBundleIdentifier,并且你想要使用键 foo KVO 默认值。

像这样设置 foo 的 kvo:

[NSUserDefaults.standardUserDefaults addObserver:self forKeyPath:@"foo" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:nil];

并在同一类中具有 KVO 回调方法:

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
{
    // just for debugging:
    NSLog(@"KVO: keyPath = '%@', change = %@", keyPath, change);
}

生成并运行应用程序;然后,在命令行上发出:

defaults write your.company.app foo "bar"

应导致调用 KVO 回调方法(使用 macOS 13、XCode9、沙盒默认 macOS Cocoa 应用程序模板、来自 AppDelegate 的 KVOing 进行测试)

最新更新