【问题标题】:OS X: NSUserDefaults not savedOS X:NSUserDefaults 未保存
【发布时间】:2014-03-07 16:36:50
【问题描述】:

我有一个适用于 OSX 的沙盒应用程序,我在 NSUserDefaults 中保存了一些数据,一切都很好,直到我从 ~Library/Preferences/ 目录中删除了 plist 文件。

我认为应用程序应该重新创建它,但它没有。当我调试时,我看到了

[[NSUserDefaults standardUserDefaults] synchronize] 方法返回YES

数据保存在类中,但是当我重新启动应用程序时,用户默认为空。

即使我将这些 plist 文件从备份复制到 Preferences 目录,应用程序也看不到它。

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

有人知道这是为什么吗?

【问题讨论】:

  • 我不明白反对票。完全合法的问题。我也遇到 NSUserDefaults 没有持续存在的问题。我想测试从“空白”板岩启动的应用程序。所以我丢弃了我的沙箱容器,一旦我这样做了,NSUserDefaults 就永远不会持续存在,直到我重新启动操作系统。登录/注销没有任何作用,只有重新启动有帮助。
  • 谢谢@Brad Goss。清理沙箱后,我遇到了同样的问题,调试了几个小时,尽管我快疯了。重新启动 OSX 似乎已经解决了。

标签: macos cocoa nsuserdefaults


【解决方案1】:

检查这个问题 - 可能与在沙盒中运行时缓存prefs location有关:

Mac sandbox created but no NSUserDefaults plist

【讨论】:

  • 同步功能应该是同步缓存和磁盘上的数据库,所以我认为缓存没有问题。首选项应该放在 Containers/app/Data/Library/Preferences 但这个目录也是空的。
  • 这也让我感到难过。擦拭容器(在开发中)引起了各种各样的悲伤。 “defaults delete”等没办法,synchronize什么也没写。
【解决方案2】:

我遇到了这个问题,这是由手动删除文件引起的。您可以做的是使用 defaults 终端命令。这样我就可以在不破坏任何东西的情况下重置默认值。将“bundle-identifier”替换为您的捆绑包 ID。

查看当前值:

defaults read bundle-identifier

要删除存储的值:

defaults delete bundle-identifier

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    相关资源
    最近更新 更多