1

在我的 mac OS X 应用程序中,我使用 NSUserDefaults 在会话中存储值。此 NSUserDefaults 仅保留相应系统级用户的会话值。但现在我想使用所有系统级用户通用的会话值。如果我从管理员存储会话值,则任何系统用户都应该访问它(例如:来宾用户)。

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

编辑内容:

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

代码:

在 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);

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

4

1 回答 1

1

如果你查看NSUserDefaults 文档的前几段,你会看到这个花絮:

NSUserDefaults 类目前不支持每个主机的首选项。为此,您必须使用 CFPreferences API(请参阅 Preferences Utilities Reference)。但是,NSUserDefaults 可以正确读取每个主机的首选项,因此您可以安全地将 CFPreferences 代码与 NSUserDefaults 代码混合使用。

CFPreferences确实有一个kCFPreferencesAnyUserkey,但在后端使用你想要做的事情也是一种痛苦。其他人提出了一些解决方法,包括将文件隐藏在机器上所有用户可读和可写的位置,但如果你真的想做到这一点,你需要想出一个解决方案,包括编写一个单独的工具(获得 root/admin 权限)设置这些权限,通过 SMJobBless 从您的应用程序调用

于 2015-03-04T19:56:22.893 回答