OS X: NSUserDefaults未保存

16

我有一个针对OSX的沙盒应用程序,并在NSUserDefaults中保存了一些数据,一切都很顺利,直到我从〜Library/Preferences/目录中删除了plist文件。

我认为应用程序应该重新创建它,但实际上并没有。当我进行调试时,我看到[[NSUserDefaults standardUserDefaults] synchronize]方法返回YES,数据保存在类中,但是当我重新启动应用程序时,默认用户设置为空。

即使我将那些plist文件从备份中复制到首选项目录中,应用程序也无法看到它。

当然,plist文件应该保存在Containers/my app bundle id/Data/Library/Preferences中,当我将plist文件从备份复制到该目录中时,应用程序可以看到它,但为什么删除它时不会重新创建该文件呢?

有人知道原因吗?


4
我不理解为什么会有负评。这是一个完全合理的问题。我在使用NSUserDefaults时也遇到了问题,它无法持久化。我想要测试我的应用程序从“空白”状态启动。所以我清空沙盒容器,但一旦我这样做了,NSUserDefaults就永远无法持久化,除非我重新启动操作系统。登入/登出没有任何作用,只有重新启动才能解决。 - Brad G
1
感谢@Brad Goss。在清理我的沙盒后,我遇到了同样的问题,调试了几个小时,以为自己要疯了。重新启动OSX似乎解决了这个问题。 - staeryatz
2个回答

2

同步函数应该将缓存与磁盘上的数据库同步,所以我认为缓存没有问题。偏好设置应放置在Containers/app/Data/Library/Preferences中,但是这个目录也是空的。 - Bartosz Bialecki
这个问题也困扰了我。在开发过程中清除容器会引起各种问题。无法使用“defaults delete”等命令,而synchronize也没有写入任何内容。 - Hal Mueller

1
我有一个问题,是由于手动删除文件导致的。相反,您可以使用defaults终端命令来重置默认值,而不会破坏任何东西。将“bundle-identifier”替换为您的捆绑标识符。
查看当前值:
defaults read bundle-identifier

要删除已存储的值:

defaults delete bundle-identifier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接