在启用应用程序组的情况下保持标准NSUserDefaults

时间:2017-11-08 20:33:30

标签: cocoa nsuserdefaults appstore-sandbox appgroups

原始情况:

我正在开发macOS 10.13上的沙盒应用程序。它是一个类似鞋盒的应用程序,由带工具栏的主窗口组成。窗口框架和工具栏配置的自动保存在Interface Builder中设置。

如果我运行并退出应用程序,我可以在应用程序的沙盒容器中看到包含预期数据的首选项文件(名为<app-identifier>.plist)。一切正常。

使用应用程序组扩展应用程序:

为了与其他沙盒应用程序进行数据交换,我在目标的Xcode Capabilities标签中创建了一个应用程序组。

到目前为止,这是有效的,即在启动应用程序时会创建一个额外的组容器。通过UserDefaults创建UserDefaults.init(suiteName:"<group-name>")对象,也可以将共享首选项存储到组容器中。

问题:

添加应用程序组后,例如,自动保存机制工具栏配置不再有效。在干净的Mac上启动和退出应用程序不再在应用程序容器的.plist目录中创建Preferences文件。而是控制台显示如下消息:

[User Defaults] attempt to set <value> for key in <key> in
non-persistent preferences domain CFPrefsPlistSource<address>
(Domain: <app-identifier>, User: kCFPreferencesCurrentUser,
ByHost: No, Container: (null), Contents Need Refresh: Yes)

它找我,自动保存机制不再能够将其数据写入首选项文件。

是否可以在应用程序组中同时使用标准UserDefaults和共享用户?

1 个答案:

答案 0 :(得分:5)

问题解决了:重新启动Mac后,一切都按预期工作。这真的很奇怪。