我目前正在开发系统窗格,我的应用程序将一些配置设置保存到用户默认值:
NSUserDefaults *userDefault=[NSUserDefaults standardUserDefaults];
NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:listOfStuff];
[userDefault setObject:encodedObject forKey:@"myStuff"];
[userDefault synchronize];
有人能告诉我其他应用程序是否以及如何读取已保存在上面系统窗格中的设置?
谢谢。
答案 0 :(得分:4)
阅读某人偏好的方式非常简单直接:
NSUserDefaults *defaults = [[NSUserDefaults alloc] init];
[defaults addSuiteNamed:@"com.apple.systempreferences.plist"];
NSLog(@"DefaultExposeTab is: %@", [defaults stringForKey:@"DefaultExposeTab"]);
确保按照以下方式初始化NSUserDefault:
[[NSUserDefaults alloc] init];
然后你可以添加所需的首选项列表,在我们的例子中我想阅读系统偏好设置:
[默认为addSuiteNamed:@" com.apple.systempreferences.plist"];
并最终获得您想要的任何键的值,在此示例中:
" DefaultExposeTab"
以上示例就像魅力一样。请记住它只适用于当前用户。
感谢。
P.S:请注意 - 上面的示例不适用于沙盒应用程序。
答案 1 :(得分:1)
正如 Melr 所解释的,您需要使用套件名称。但实际上可以从沙盒应用程序中读取另一个应用程序的首选项。它需要一个 temporary exception entitlement。
例如,要阅读 Finder 首选项,您需要将其添加到您的 权利文件:
<key>com.apple.security.temporary-exception.shared-preference.read-only</key>
<array>
<string>com.apple.finder</string>
</array>
然后您可以像这样访问 Finder 首选项:
NSUserDefaults *finderDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"com.apple.finder"];
NSDictionary *standardViewOptions = [finderDefaults dictionaryForKey:@"StandardViewOptions"];
NSNumber *fontSize = [standardViewOptions valueForKeyPath:@"ColumnViewOptions.FontSize"];
如果您需要阅读其他应用的首选项,只需将 com.apple.finder
替换为适当的包标识符。
答案 2 :(得分:0)
我的应用程序 Prefs Editor 为此使用 CFPreferences 函数(例如 CFPreferencesSetAppValue)。这让您可以直接控制您将访问谁的应用设置。
如果您知道其 plist 文件的完整路径并将其传递给 applicationID
参数,您甚至可以使用此方法访问沙盒应用程序的首选项。
有关详细信息,请通读此问题的答案:How does OS X's defaults command get access to prefs of sandboxed apps?
答案 3 :(得分:-2)
是的,如果使用NSUserDefaults
进行保存,则另一个应用程序可以读取设置,因为它将设置保存为磁盘上未加密的plist文件。
从plist文件中读取另一个应用程序的设置很简单。搜索文件路径并将其打开。可以使用plist文件的文件路径字符串初始化NSDictionary
。
如果您要存储的默认值是密码(如密码,安全令牌等),则将加密项添加到钥匙串中,而不是将它们存储在plist中。