我正在开发一款为Mountain Lion开发的Mac OS X应用程序。该应用程序在第一次运行时执行一些设置任务。然后它在[NSUserDefaults standardUserDefaults]
中设置一个标志;在后续运行中,应用程序会检查该标志是否已设置,如果已设置,则不会执行这些首次设置任务。
在Mountain Lion上,我能够删除〜/ Library / Preferences / bundleid.plist文件,以清除应用程序存储在NSUserDefaults中的所有内容。但是,在最新版本的Mac OS X上,当应用程序运行时,它甚至都没有创建该文件。我通过检查调试器中从[[NSUserDefaults standardUserDefaults] objectForKey:@"foo"]
返回的值来验证它是否已成功将数据保存到NSUserDefaults。
有人能指出我关于如何删除存储在NSUserDefaults中的应用程序设置的正确方向吗?
答案 0 :(得分:18)
小牛还没有被释放,所以我忽略了这个问题的一部分。如果您想要特定于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。