程序化等效的“默认写入”命令,例如,如何使用NSUserDefaults?

时间:2010-09-12 00:18:48

标签: macos nsuserdefaults

尝试以编程方式执行'defaults write'命令在OS X中执行的操作。我似乎无法弄清楚如何为我正在寻找的域获取正确的首选项字典。我可以在下面的代码中获得对域的一些偏好,但是有问题的偏好似乎不在dict中。

为什么/如何在终端命令中但不在代码中?它们不是标准用户默认值吗?似乎无法找到它们。

编辑:这些是我试图输入代码的命令:

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 个答案:

答案 0 :(得分:6)

使用Core Foundation可能更容易,例如,

CFPreferencesSetAppValue( CFSTR("mcx-expose-disabled"), kCFBooleanTrue, CFSTR("com.apple.dock") );
CFPreferencesAppSynchronize( CFSTR("com.apple.dock") );

答案 1 :(得分:4)

唯一的问题是你的路线:

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

这应该是

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

Objective-C不会将原始类型的值“自动装箱”到对象中。

而且,编译器应该给你一个警告,告诉你不能将YES传递给setValue:forKey:您应该检查编译器发出的每个警告!这就是警告的内容!