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

标签 objective-c macos cocoa nsuserdefaults key-value-observing

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

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

我已经列举了许多有关观察 NSUserDefaults 更改的示例。看起来通知已经消失了,因为它们只在同一进程中工作。为了观察命令行的变化,我认为需要 KVO。

在我见过的 KVO 示例中,我不清楚如何将“defaults write ...”命令行调用中使用的“domain”和“key”参数关联到所使用的 KVO 逻辑的编程结构观察这些变化。

如果有一个简洁、具体的可运行示例,其中包含代码和相关的“defaults write ...”命令,我们将不胜感激!

最佳答案

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

假设您的应用的 CFBundleIdentifieryour.company.app,并且您希望使用键 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 的 KVO 进行测试)

关于objective-c - 如何在 Objective-C 应用程序中观察 NSUserDefaults 的命令行更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54374090/

相关文章:

iOS UIView - 4 个角各有不同的圆角半径

objective-c - 如何在Cocoa中动态添加组件

cocoa - 如何在 Mac OS X Lion 上使用 AVCaptureSession 从 Bodelin ProScope HR 捕获帧?

iphone - 我如何检查 NSArray 中是否存在特定的 NSString?

ios - 如何更改 AVPlayer 中播放音频的速度?

objective-c - 动画 UIImageView 色调颜色不起作用

c++ - 人工降低CPU速度或内核数

ios - Xcode - 如何检测 iPhone 的屏幕尺寸

xcode - 将文件从应用程序包复制到用户的应用程序支持文件夹

ios - 使用余数运算符(模)并转换为 Int 返回 false 值