我希望我的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 进行测试)