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

Rib*_*die 4 macos nsuserdefaults

尝试以编程方式执行"默认写入"命令在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"];
Run Code Online (Sandbox Code Playgroud)

JWW*_*ker 6

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

CFPreferencesSetAppValue( CFSTR("mcx-expose-disabled"), kCFBooleanTrue, CFSTR("com.apple.dock") );
CFPreferencesAppSynchronize( CFSTR("com.apple.dock") );
Run Code Online (Sandbox Code Playgroud)


Yuj*_*uji 5

唯一的问题是你在这里的线路:

 [dockDict setValue:YES forKey:@"mcx-expose-disabled"];
Run Code Online (Sandbox Code Playgroud)

这应该是

 [dockDict setValue:[NSNumber numberWithBool:YES] forKey:@"mcx-expose-disabled"];
Run Code Online (Sandbox Code Playgroud)

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

而且,编译器应该给你一个警告,说你不能传递YESsetValue:forKey:. 您应该检查编译器发出的每个警告!这就是警告的目的!