2013-10-07 41 views
7

我正在開發針對Mountain Lion開發的Mac OS X應用程序。該應用在第一次運行時執行一些設置任務。然後它在[NSUserDefaults standardUserDefaults]中設置一個標誌;在後續運行時,應用程序會檢查該標誌是否已設置,並且如果已設置,則不執行這些首次設置任務。NSUserDefaults在Mac OS X上存儲數據的位置?

在山獅,我能夠刪除〜/庫/首選項/ bundleid.plist文件全殲由應用程序存儲在一切NSUserDefaults的。但是,在更新版本的Mac OS X上,應用程序運行時甚至不會創建該文件。我通過檢查調試器中從[[NSUserDefaults standardUserDefaults] objectForKey:@"foo"]返回的值來驗證它是否成功地將數據保存到NSUserDefaults。

任何人都可以點我就如何刪除存儲在我的NSUserDefaults的應用程序的設置正確的方向?

+1

小牛隊仍處於保密協議下,所以我懷疑有人可以直接回答你的問題。也就是說,你是否嘗試過使用fs_usage(一種可用於所有版本OS X的工具)來查看應用程序試圖保存plist的位置? – iccir

+0

哎呀,我的壞 - 我刪除了引用小牛。 – Greg

+0

我認爲這是安全的,但:https://devforums.apple.com/message/894120 –

回答

18

小牛尚未發佈,所以我忽略了問題的一部分。你應該問開發者論壇,如果你想要一個小牛特定的答案。

無論OS X版本如何,刪除默認域的正確方法是使用defaults delete bundleidits programmatic equivalent~/Library/Preferences是一個實現細節。其中包含的plists並不總是包含最新的信息。在Mountain Lion之前,默認更改會緩存在各個應用程序中,直到他們synchronize;在Mountain Lion以後,他們在內存中保持cfprefsd進程並懶洋洋地刷到了磁盤上。

更多信息,請參見Core Foundation release notes for 10.8

2016更新:一個電流導向到NSUserDefaults的狀態是here