删除plist后,Xcode 5.0 NSUserdefaults仍会获得存储的首选项

时间:2013-10-21 01:05:52

标签: objective-c xcode macos cocoa

在使用NSUserDefaults时,我遇到了在Xcode 5上编程osx应用程序的问题。通常,我们只使用[[NSUserDefaults standardUserDefaults] setObject:@"This is an object" forKey:@"Test"]来记住用户偏好。之后,应用程序将在〜/ Library / Preferences / application.bundle.identifier.plist中生成一个plist文件。

问题是,删除plist文件后,应用程序仍然可以获取我存储的首选项。即使我试图清理项目,重新启动xcode,删除派生文件夹中的文件,也无法清除该plist。解决这个问题的唯一方法是重启系统,所以我猜存储器中存有一些东西。问题是如何清除这些存储的偏好? (我不认为通过在调试和测试中手动添加代码来清除首选项很方便。)我尝试了以前版本的Xcode 4.x,没有这样的问题。任何人都有兴趣可以创建一个新的可可项目,并添加如下代码:

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

在“applicationDidFinishLaunching”下。然后去删除~/Library/Preferences/application.bundle.identifier.plist。 之后,请评论该行:[defaults setObject:@"This is an object." forKey:@"Test"]; 在您的代码中再次运行应用程序。控制台仍会显示"This is an object." 我的环境是Mavericks GM和Xcode 5.0(5a1413)。

希望这不仅仅发生在我身上并且感谢任何帮助!

1 个答案:

答案 0 :(得分:20)

这是一个与您正在使用的Xcode版本没有直接关系的OS X问题。 Apple的官方路线是删除plist文件以删除首选项从未得到官方支持,并且在最近的OS X版本中,由于存储首选项的方式发生变化,因此不可靠。

支持的删除首选项的方法是在终端使用defaults命令,例如:

defaults delete application.bundle.identifier

defaults命令还可以在首选项中删除/更改个别设置。有关详细信息,请参阅man defaults