如何存储OS X中所有系统用户通用的会话值

时间:2015-03-04 14:12:37

标签: macos session nsuserdefaults cfpreferences

在我的mac OS X应用程序中,我使用NSUserDefaults在会话中存储值。此NSUserDefaults仅为各个系统级用户保留会话值。但现在我想使用所有系统级用户都常用的会话值。如果我存储来自admin的会话值,则任何系统用户都应该访问它(例如:Ex:Guest User)。

建议您的答案来实现这一目标。

已编辑内容:

我已经使用CFPreferences来存储所有系统用户的会话值,并参考了迈克尔的答案。

代码:

在CFPreferences中保存值

 CFStringRef appID = CFSTR("com.company.test");
    CFStringRef textColorKey = CFSTR("test123");
    CFStringRef colorBLUE = CFSTR("BLUE");
    CFPreferencesSetValue (textColorKey,
                           colorBLUE,
                           appID,
                           kCFPreferencesAnyUser,
                           kCFPreferencesCurrentHost
                           );

    CFPreferencesSynchronize(appID,
                             kCFPreferencesAnyUser,
                             kCFPreferencesCurrentHost);

从CFPreferences中检索

CFStringRef textColorKey = CFSTR("test123");
CFStringRef textColor;
// Read the preference.
CFStringRef appID = CFSTR("com.company.test");

textColor = (CFStringRef)CFPreferencesCopyValue(textColorKey,
                                                appID,
                                                kCFPreferencesAnyUser,
                                                kCFPreferencesCurrentHost);

但它总是检索零值。请指出我在这里缺少的东西。

1 个答案:

答案 0 :(得分:1)

如果你在first few paragraphs of the NSUserDefaults documentation内查看,你会看到这个消息:

  

NSUserDefaults类目前不支持每台主机   喜好。为此,您必须使用CFPreferences API(请参阅   首选项实用程序参考)。但是,NSUserDefaults正确   读取每个主机的首选项,因此您可以安全地混合CFPreferences代码   使用NSUserDefaults代码。

CFPreferences 确实有一个kCFPreferencesAnyUser key,但它也是pain in the rear end to use你想要做的事情。其他人建议使用workarounds that involve hiding files in locations that are readable and writable to all users on the machine,但如果您确实想要做到这一点,那么您需要提出一个涉及writing a separate tool (which gets root/admin privileges) that sets these privileges, called via SMJobBless from your app的解决方案。