Как наблюдать изменения командной строки в NSUserDefaults в приложении Objective-C? - PullRequest
0 голосов
/ 26 января 2019

Я бы хотел, чтобы мое приложение Cocoa Objective-C наблюдало за изменениями NSUserDefaults, которые являются результатом вызова командной строки записи значений по умолчанию, таких как:

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

Я рассмотрел много примеров, касающихся наблюденияNSUserDefaults меняется.Похоже, что уведомления отсутствуют, потому что они работают только в одном процессе.Чтобы наблюдать изменения в командной строке, я считаю, что KVO требуется.

В примерах KVO, которые я видел, мне не ясно, как связать аргументы "domain" и "key", используемые в "defaults"write ... "вызов командной строки для программных конструкций логики KVO, используемых для наблюдения за этими изменениями.

Краткий, конкретный выполняемый пример с кодом и соответствующей командой" defaults write ... "будетс благодарностью!

1 Ответ

0 голосов
/ 26 января 2019

Это как KVO для любых других изменений по умолчанию.

Предположим, что ваше приложение имеет CFBundleIdentifier из your.company.app , и вы хотите установить значение KVO по умолчанию с помощью клавиши foo .

Настройка KVO foo примерно так:

[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 для приложения MacOS, KVOing из AppDelegate)

...