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

joh*_*ohn 11 macos xcode cocoa objective-c

我在使用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"]); 
Run Code Online (Sandbox Code Playgroud)

在"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).

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

CRD*_*CRD 20

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

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

defaults delete application.bundle.identifier
Run Code Online (Sandbox Code Playgroud)

defaults命令还可以在首选项中删除/更改单个设置.详情请见man defaults.