【问题标题】:Where does NSUserDefaults store data on Mac OS X?NSUserDefaults 在 Mac OS X 上的哪里存储数据?
【发布时间】:2013-10-07 20:59:39
【问题描述】:

我正在开发一个为 Mountain Lion 开发的 Mac OS X 应用程序。该应用程序在第一次运行时会执行一些设置任务。然后它在[NSUserDefaults standardUserDefaults] 中设置一个标志;在随后的运行中,应用程序会检查是否设置了该标志,如果设置了,则不会执行这些首次设置任务。

在 Mountain Lion 上,我能够删除 ~/Library/Preferences/bundleid.plist 文件以清除应用程序存储在 NSUserDefaults 中的所有内容。但是,在最新版本的 Mac OS X 上,当应用程序运行时,它甚至不会创建该文件。我通过在调试器中检查从[[NSUserDefaults standardUserDefaults] objectForKey:@"foo"] 返回的值来验证它是否成功地将数据保存到 NSUserDefaults。

关于如何删除存储在 NSUserDefaults 中的应用设置,谁能指出我正确的方向?

【问题讨论】:

  • 小牛队仍处于保密协议下,所以我怀疑任何人都可以直接回答你的问题。也就是说,您是否尝试过使用 fs_usage(一种适用于所有 OS X 版本的工具)来查看应用程序试图将 plist 保存在哪里?
  • 哎呀,我的错 - 我删除了对小牛队的引用。
  • 我认为这是安全的,不过:devforums.apple.com/message/894120
  • @Greg:你的问题仍然是关于小牛队的。代号不在 NDA 之下(Apple 公开宣布),但在 Mavericks 出来之前,它存储或不存储偏好文件的位置是。
  • @PeterHosey:我正在尽力使这个问题版本保持中立。仅供参考,数据最终会写入 ~/Library/Preferences 下的文件;它只是没有那么快发生。

标签: objective-c macos cocoa nsuserdefaults


【解决方案1】:

小牛队尚未发布,所以我忽略了这部分问题。如果您需要 Mavericks 特定的答案,您应该在开发者论坛上提问。

无论 OS X 版本如何,删除默认域的正确方法是使用 defaults delete bundleidits programmatic equivalent~/Library/Preferences 是一个实现细节。其中包含的 plist 并不总是包含最新信息。在 Mountain Lion 之前,默认更改会缓存在各个应用程序中,直到它们 synchronize;在 Mountain Lion 及更高版本中,它们在 cfprefsd 进程中保存在内存中并延迟刷新到磁盘。

请参阅Core Foundation release notes for 10.8 了解更多信息。

2016 年更新:NSUserDefaults 状态的当前指南是here

【讨论】:

    猜你喜欢
    • 2010-10-15
    • 2011-12-20
    • 2013-12-08
    • 1970-01-01
    • 2013-10-31
    • 2016-11-26
    • 2013-03-27
    • 2015-11-05
    相关资源
    最近更新 更多