NSUserDefaults在Mac OS X中的数据存储位置是什么?

8
我正在开发一款Mac OS X应用程序,它是为Mountain Lion开发的。该应用程序在第一次运行时执行一些设置任务。然后在[NSUserDefaults standardUserDefaults]中设置一个标志;在随后的运行中,如果设置了该标志,则应用程序将不执行这些首次设置任务。
在Mountain Lion上,我可以删除~/Library/Preferences/bundleid.plist文件来清除应用程序存储在NSUserDefaults中的所有内容。但是,在更近期的Mac OS X版本中,当应用程序运行时,甚至都没有创建该文件。通过检查调试器中[[NSUserDefaults standardUserDefaults] objectForKey:@"foo"]返回的值,我验证了它成功地将数据保存到NSUserDefaults中。
有没有人能指点我如何删除存储在NSUserDefaults中的我的应用程序设置?

1
Mavericks仍然受到NDA的限制,所以我怀疑没有人能够直接回答你的问题。话虽如此,您是否尝试使用fs_usage(在所有OS X版本中都可用的工具)来查看应用程序尝试保存plist的位置? - iccir
糟糕,我的错 - 我删除了对Mavericks的引用。 - Greg
我认为这是安全的:https://devforums.apple.com/message/894120 - Nicholas Riley
@Greg:你的问题仍然涉及Mavericks。代号并不受保密协议限制(苹果已经公开宣布),但是它存储偏好文件的位置是否发生变化,要等到Mavericks发布后才能确定。 - Peter Hosey
@PeterHosey:我正在尽力使这个问题的版本中立。顺便说一下,数据最终会写入到~/Library/Preferences文件中,只是时间不那么快而已。 - Greg
1个回答

18
"Mavericks尚未发布,因此我忽略了问题的这部分。如果您想要Mavericks特定的答案,应该在开发者论坛上提问。
无论OS X版本如何,删除默认域的正确方法是使用defaults delete bundleid其编程等效方法〜/ Library / Preferences是实现细节。其中包含的属性列表并不总是包含最新信息。在Mountain Lion之前,默认更改会在单个应用程序中缓冲,直到它们同步;在Mountain Lion及更高版本中,它们在cfprefsd进程中保持在内存中,并懒惰地刷新到磁盘中。
有关更多信息,请参见Core Foundation release notes for 10.8
2016年更新:有关NSUserDefaults状态的当前指南在here。"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接