首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展之间共享UserDefaults

扩展之间共享UserDefaults
EN

Stack Overflow用户
提问于 2017-08-10 08:07:11
回答 5查看 38.6K关注 0票数 75

创建一个“今天”小部件,我将使用UserDefaults(suiteName:)来持久化一些数据。在主要应用程序中,我使用的是UserDefaults.standard()。这是读不懂的(或者可以吗?)通过扩展,这就是为什么我使用suiteName:构造函数。

用户在主应用程序中持久化到UserDefaults.standard()的数据需要在扩展中获得。

此时,我坚持这两种方法,以便能够共享这些值。

代码语言:javascript
复制
 UserDefaults.standard().set:...forKey:...
 UserDefaults(suiteName:...)().set:...forKey:...
 ...

问题是,我应该把UserDefaults.standard()放在一起,只在我的应用程序中使用UserDefaults(suiteName:),还是这种做法很糟糕,如果是的话,原因何在?

编辑:我正在使用应用程序组容器。为了得到澄清,我想问的是,我是否应该在整个项目中用standard()替换suiteName:

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-08-10 08:17:01

您不能使用UserDefaults.standard在主机应用程序及其应用程序扩展之间共享数据。相反,您必须使用UserDefaults(suiteName:)创建一个共享容器来共享数据。

尽管应用程序扩展包嵌套在包含app的包中,但正在运行的应用程序扩展和包含app的应用程序不能直接访问对方的容器。 若要启用数据共享,请使用Xcode或Developer门户为包含的应用程序及其包含的应用程序扩展启用应用程序组。接下来,在门户中注册应用程序组,并指定要在包含的应用程序中使用的应用程序组。 启用应用程序组之后,应用程序扩展及其包含的应用程序都可以使用NSUserDefaults API来共享对用户首选项的访问。要启用此共享,请使用initWithSuiteName:方法实例化一个新的NSUserDefaults对象,传递共享组的标识符。

有关更多信息,请参见:ref/doc/uid/TP40014214-CH21-SW1

如何使用应用程序组:https://github.com/pgpt10/Today-Widget

标准还是SuiteName?

对仅用于宿主应用程序的数据使用标准一。对于要在扩展程序和宿主应用程序之间共享的数据,请使用suiteName。只是不要将相同的数据保存在这两种数据中。避免数据冗余。根据上下文使用这两种语言。

票数 80
EN

Stack Overflow用户

发布于 2019-03-10 05:39:46

确保在“功能”选项卡中为App Groups启用了所有目标(应用程序和扩展目标)

然后在创建时使用上面的组的标识符作为套件名

代码语言:javascript
复制
let userDefaults = UserDefaults(suiteName: "group.com.YourCompany.YourApp")
票数 66
EN

Stack Overflow用户

发布于 2018-03-09 13:57:11

一个简单的示例,其中我创建了一个共享包:

代码语言:javascript
复制
if let userDefaults = UserDefaults(suiteName: "group.your.bundle.here") {
    userDefaults.set("test 1" as AnyObject, forKey: "key1")
    userDefaults.set("test 2" as AnyObject, forKey: "key2")
    userDefaults.synchronize()
}

以下是您稍后可以阅读的内容:

代码语言:javascript
复制
if let userDefaults = UserDefaults(suiteName: "group.your.bundle.here") {
    let value1 = userDefaults.string(forKey: "key1")
    let value2 = userDefaults.string(forKey: "key2")
    ...
}
票数 45
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45607903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档