如何通过NSUserDefaults为命令行工具分享首选项?

时间:2011-04-15 18:16:06

标签: macos nsuserdefaults

我想要六个命令行工具(用于测试)来共享一个包ID,这样他们就可以共享一个NSUserDefaults和Library / Caches子文件夹。我可以使用硬编码字符串绕过Library / Caches子文件夹,但是如何设置NSUserDefaults保存到的文件?

在捆绑应用程序中,它由Info.plist中的软件包ID设置。但是如何为一组没有Info.plist的命令行工具设置包ID?

1 个答案:

答案 0 :(得分:6)

使用+alloc创建一个NSUserDefaults实例& -init,而不是使用+standardUserDefaults。以这种方式创建的用户默认实例不会使用与主包ID对应的默认域创建,因此您需要使用-addSuiteNamed:方法手动向其添加默认域。

更新)抱歉,我的不好!套件是易失性的,而不是持久性的 - 对于需要读取一组共享默认值的工具很有用,对于想要设置默认值的应用程序而言则非常有用。对于后者,请查看-setPersistentDomain:forName:。域字典中的键定义了哪些键属于命名的默认域,并且值提供其默认值。

这是一个简短的例子,它应该创建〜/ Library / Defaults / com.shermpendley.DefaultsTest.plist,并将列出的键/值对存储在其中:

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSUserDefaults *defaults = [[NSUserDefaults alloc] init];
    [defaults setPersistentDomain:[NSDictionary dictionaryWithObject:@"Hello" forKey:@"World"] forName:@"com.shermpendley.DefaultsTest"];
    [defaults synchronize];
    [defaults release];

    [pool drain];
    return 0;
}