Macos 编程等效于;默认值为“写入”;命令,例如,如何使用NSUserDefaults?

Macos 编程等效于;默认值为“写入”;命令,例如,如何使用NSUserDefaults?,macos,nsuserdefaults,Macos,Nsuserdefaults,尝试以编程方式执行OS X中的“defaults write”命令。我似乎不知道如何为我要查找的域获取正确的首选项字典。我可以在下面的代码中获得一些域的首选项,但所讨论的首选项似乎不在dict中 为什么/如何在terminal命令中而不在代码中?它们是否不在标准用户默认值中?只是好像找不到他们 编辑:以下是我试图输入代码的命令: defaults write com.apple.dock mcx-expose-disabled -bool true defaults write com.appl

尝试以编程方式执行OS X中的“defaults write”命令。我似乎不知道如何为我要查找的域获取正确的首选项字典。我可以在下面的代码中获得一些域的首选项,但所讨论的首选项似乎不在dict中

为什么/如何在terminal命令中而不在代码中?它们是否不在标准用户默认值中?只是好像找不到他们

编辑:以下是我试图输入代码的命令:

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"];

唯一的问题是您的线路:

 [dockDict setValue:YES forKey:@"mcx-expose-disabled"];
这应该是

 [dockDict setValue:[NSNumber numberWithBool:YES] forKey:@"mcx-expose-disabled"];
Objective-C不会将基元类型的值“自动装箱”到对象中


而且,编译器应该给您一个警告,告诉您不能将
YES
传递给
setValue:forKey:
您应该检查编译器发出的每个警告!这就是警告的目的
CFPreferencesSetAppValue( CFSTR("mcx-expose-disabled"), kCFBooleanTrue, CFSTR("com.apple.dock") );
CFPreferencesAppSynchronize( CFSTR("com.apple.dock") );

为什么不准确地显示您想要等效的
默认写入
命令?编辑以回答您的问题。谢谢,我实际上还没有用setValue行运行此代码,到目前为止,我只使用NSLog()调用来运行它,以查看字典中的内容。谢谢,这在我必须编写的代码方面要简单得多,但我将另一个答案标记为接受答案,因为a)Yuji首先发布,b)技术上我的问题是关于Objective-C API,而不是C API。但是如果我知道你提到的CFAPI,我可能会这么做。