在启用应用程序组的情况下保留标准 NSUserDefaults
Persisting standard NSUserDefaults with App Groups enabled
原情况:
我正在 macOS 10.13 上开发沙盒应用程序。这是一个类似鞋盒的应用程序,由一个带工具栏的主 window 组成。 window 框架和工具栏配置的自动保存在 Interface Builder 中设置。
如果我 运行 并退出应用程序,我可以在应用程序的沙盒容器中看到包含预期数据的首选项文件(名为 <app-identifier>.plist
)。一切正常。
使用应用组扩展应用:
为了允许与其他沙盒应用进行数据交换,我在 Xcode 的目标 Capabilities
选项卡中创建了一个应用组。
到目前为止这是有效的,即在启动应用程序时创建了一个额外的组容器。也可以通过 UserDefaults.init(suiteName:"<group-name>")
.
创建 UserDefaults
对象,将共享首选项存储到组容器中
问题:
添加应用组后,自动保存机制如工具栏配置不再有效。在干净的 Mac 上启动和退出应用程序不再在应用程序容器的 Preferences
目录中创建 .plist
文件。相反,控制台会显示如下消息:
[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 和共享用户默认值?
问题已解决:重新启动 Mac 后,一切正常。这真的很奇怪。
原情况:
我正在 macOS 10.13 上开发沙盒应用程序。这是一个类似鞋盒的应用程序,由一个带工具栏的主 window 组成。 window 框架和工具栏配置的自动保存在 Interface Builder 中设置。
如果我 运行 并退出应用程序,我可以在应用程序的沙盒容器中看到包含预期数据的首选项文件(名为 <app-identifier>.plist
)。一切正常。
使用应用组扩展应用:
为了允许与其他沙盒应用进行数据交换,我在 Xcode 的目标 Capabilities
选项卡中创建了一个应用组。
到目前为止这是有效的,即在启动应用程序时创建了一个额外的组容器。也可以通过 UserDefaults.init(suiteName:"<group-name>")
.
UserDefaults
对象,将共享首选项存储到组容器中
问题:
添加应用组后,自动保存机制如工具栏配置不再有效。在干净的 Mac 上启动和退出应用程序不再在应用程序容器的 Preferences
目录中创建 .plist
文件。相反,控制台会显示如下消息:
[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 和共享用户默认值?
问题已解决:重新启动 Mac 后,一切正常。这真的很奇怪。