在使用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)。
希望这不仅仅发生在我身上并且感谢任何帮助!
答案 0 :(得分:20)
这是一个与您正在使用的Xcode版本没有直接关系的OS X问题。 Apple的官方路线是删除plist文件以删除首选项从未得到官方支持,并且在最近的OS X版本中,由于存储首选项的方式发生变化,因此不可靠。
支持的删除首选项的方法是在终端使用defaults
命令,例如:
defaults delete application.bundle.identifier
defaults
命令还可以在首选项中删除/更改个别设置。有关详细信息,请参阅man defaults
。