2013-10-21 53 views
11

我在使用NSUserDefaults時遇到了在Xcode 5上編寫osx應用程序的問題。通常,我們只使用[[NSUserDefaults standardUserDefaults] setObject:@"This is an object" forKey:@"Test"]來記住用戶偏好。之後,應用程序將在〜/ Library/Preferences/application.bundle.identifier.plist中生成一個plist文件。Xcode 5.0在刪除plist後,NSUserdefaults仍然存儲首選項

問題是,我刪除了plist文件後,應用程序仍然可以獲取我存儲的首選項。即使我嘗試清理項目,重新啓動xcode,刪除派生文件夾中的文件,也無法清除該plist。我解決這個問題的唯一方法就是重新啓動系統,所以我猜想有些東西存儲在內存中。問題是我如何清除這些存儲的偏好? (我認爲通過在調試和測試中手動添加代碼來清除首選項並不方便)。我嘗試了Xcode 4.x的前一版本,但沒有這樣的問題。任何人有興趣可以只創建一個新的可可項目,並添加喜歡的代碼:「在applicationDidFinishLaunching」下

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];  
[defaults setObject:@"This is an object." forKey:@"Test"];  
NSLog(@"%@", [defaults objectForKey:@"Test"]); 

。然後去刪除~/Library/Preferences/application.bundle.identifier.plist。 之後,在代碼中註釋行:[defaults setObject:@"This is an object." forKey:@"Test"]; 並再次運行應用程序。控制檯仍然會顯示"This is an object." 我的環境是Mavericks GM和Xcode 5.0(5a1413)。

希望這不是隻發生在我身上,感謝任何幫助!

+0

你鏈接的SDK是什麼?如果您在刪除數據後立即嘗試訪問首選項,並且獲取了刪除的數據,則可能會緩存數據。 – SevenBits

+2

[NSUserDefaults在Mac OS X上存儲數據的位置?](http://stackoverflow.com/questions/19234665/where-does-nsuserdefaults-store-data-on-mac-os-x) –

回答

20

這是一個與您正在使用的Xcode版本沒有直接關係的OS X問題。蘋果公司的官方言論是,刪除plist文件以刪除首選項從未得到官方的支持,而在最近的OS X發行版中,由於首選項的存儲方式發生了變化,因此它變得不可靠。

支持的方式來刪除喜好是在終端使用defaults命令,例如:

defaults delete application.bundle.identifier 

defaults命令還可以刪除/與在喜好改變各個設置。詳情請參閱man defaults

+0

謝謝非常! – john

+0

我今天也碰到過這個。建議刪除像@CRD這樣的默認值時,確保包標識區分大小寫! – Besi