尝试以编程方式执行'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"];
答案 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:
。 您应该检查编译器发出的每个警告!这就是警告的内容!