Программный эквивалент команды «запись по умолчанию», например, как использовать NSUserDefaults? - PullRequest
4 голосов
/ 12 сентября 2010

Попытка программно сделать то, что делает команда 'defaults write' в OS X. Кажется, я не могу понять, как получить правильный словарь настроек для искомого домена. Я могу получить некоторые предпочтения для доменов в приведенном ниже коде, но рассматриваемые предпочтения, похоже, не вписываются в текст.

Почему / Как они в терминальной команде, а не в коде? Они не в стандартных пользовательских настройках по умолчанию? Просто не могу их найти.

Изменить: это команды, которые я пытаюсь вставить в код:

defaults write com.apple.dock mcx-expose-disabled -bool true
defaults write com.apple.dashboard mcx-disabled -bool true




NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

NSMutableDictionary   *dockDict = [[defaults persistentDomainForName:@"com.apple.dock"] mutableCopy];
NSMutableDictionary   *dashDict = [[defaults persistentDomainForName:@"com.apple.dashboard"] mutableCopy];

[dockDict setValue:YES forKey:@"mcx-expose-disabled"];


[defaults setPersistentDomain:dockDict forName:@"com.apple.dock"];
[defaults setPersistentDomain:dashDict forName:@"com.apple.dashboard"];

Ответы [ 2 ]

6 голосов
/ 12 сентября 2010

Для этого может быть проще использовать Core Foundation, например,

CFPreferencesSetAppValue( CFSTR("mcx-expose-disabled"), kCFBooleanTrue, CFSTR("com.apple.dock") );
CFPreferencesAppSynchronize( CFSTR("com.apple.dock") );
4 голосов
/ 12 сентября 2010

Единственная проблема в том, что ваша строка здесь:

 [dockDict setValue:YES forKey:@"mcx-expose-disabled"];

Это должно быть

 [dockDict setValue:[NSNumber numberWithBool:YES] forKey:@"mcx-expose-disabled"];

Objective-C не "автоматически упаковывает" значения примитивных типов в объекты.

И компилятор должен был предупредить вас о том, что вы не можете передать YES в setValue:forKey:. Вы должны проверять каждое предупреждение, выдаваемое компилятором !Вот для чего предупреждения!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...