创建一个 Today 小部件,我正在使用UserDefaults(suiteName:)
保存一些数据。在我使用的主应用程序中UserDefaults.standard()
。扩展程序无法读取(或者可以吗?),这就是我使用suiteName:
构造函数。
用户坚持的数据UserDefaults.standard()
主应用程序中的内容需要在扩展程序中可用。
现在我坚持两者,以便价值观能够共享
UserDefaults.standard().set:...forKey:...
UserDefaults(suiteName:...)().set:...forKey:...
...
问题是我应该放弃吗UserDefaults.standard()
一起使用UserDefaults(suiteName:)
在我的应用程序中,或者这是不好的做法,如果是的话为什么?
编辑:我正在使用应用程序组容器。为了澄清,我想问我是否应该更换standard()
with suiteName:
贯穿我的项目?
你不能使用UserDefaults.standard
在主机应用程序及其应用程序扩展之间共享数据。相反,您必须创建一个共享容器UserDefaults(suiteName:)
共享数据。
即使应用程序扩展包嵌套在其包含的内容中
应用程序的捆绑包,正在运行的应用程序扩展和包含的应用程序没有
直接访问彼此的容器。
要启用数据共享,请使用 Xcode 或开发人员门户启用
包含应用程序及其包含的应用程序扩展的应用程序组。
接下来,在门户中注册应用程序组并指定应用程序组
在包含的应用程序中使用。
启用应用程序组、应用程序扩展及其包含的应用程序后
都可以使用 NSUserDefaults API 来共享用户的访问权限
优先。要启用此共享,请使用 initWithSuiteName: 方法
实例化一个新的 NSUserDefaults 对象,传入标识符
共享组的。
更多内容请参考:https://developer.apple.com/library/content/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW1 https://developer.apple.com/library/content/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW1
如何使用应用程序组:https://github.com/pgpt10/Today-Widget https://github.com/pgpt10/Today-Widget
标准还是套房名称?
对于仅适用于主机应用程序的数据,请使用标准数据。将 suiteName 用于要在扩展程序和主机应用程序之间共享的数据。只是不要在两者中保留相同的数据。避免数据冗余。根据上下文使用它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)