NSUserDefaults 在 Mac OS X 上的哪里存储数据?
Posted
技术标签:
【中文标题】NSUserDefaults 在 Mac OS X 上的哪里存储数据?【英文标题】:Where does NSUserDefaults store data on 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 下的文件;它只是没有那么快发生。 【参考方案1】:小牛队尚未发布,所以我忽略了这部分问题。如果您需要 Mavericks 特定的答案,您应该在开发者论坛上提问。
无论 OS X 版本如何,删除默认域的正确方法是使用 defaults delete bundleid
或 its programmatic equivalent。 ~/Library/Preferences
是一个实现细节。其中包含的 plist 并不总是包含最新信息。在 Mountain Lion 之前,默认更改会缓存在各个应用程序中,直到它们 synchronize
;在 Mountain Lion 及更高版本中,它们在 cfprefsd
进程中保存在内存中并延迟刷新到磁盘。
请参阅Core Foundation release notes for 10.8 了解更多信息。
2016 年更新:NSUserDefaults 状态的当前指南是here。
【讨论】:
以上是关于NSUserDefaults 在 Mac OS X 上的哪里存储数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Mac OS X 上装设 LaTeX 以及 CJK 套件