创建一个Today小部件,我UserDefaults(suiteName:)
用来保留一些数据。在主应用程序中,我正在使用UserDefaults.standard()
。这不能由扩展读取(或可以?),这就是为什么我使用suiteName:
构造函数。
用户UserDefaults.standard()
在主应用程序中持久存储的数据需要在扩展程序中可用。
目前,我坚持两者,以便可以共享这些值
UserDefaults.standard().set:...forKey:...
UserDefaults(suiteName:...)().set:...forKey:...
...
问题是我应该将UserDefaults.standard()
它们放在一起并仅UserDefaults(suiteName:)
在我的应用程序中使用,还是这种不好的做法?
编辑:我正在使用一个应用程序组容器。为了澄清起见,我问我是否应该在整个项目中用suiteName:替换standard()?
您不能用于UserDefaults.standard
在主机应用程序及其应用程序扩展之间共享数据。相反,您必须创建一个共享容器UserDefaults(suiteName:)
以共享数据。
即使应用程序扩展捆绑包嵌套在其包含的应用程序捆绑包中,正在运行的应用程序扩展和包含的应用程序也无法直接访问彼此的容器。
要启用数据共享,请使用Xcode或Developer门户为包含的应用程序及其包含的应用程序扩展名启用应用程序组。接下来,在门户中注册应用程序组,然后指定要在包含的应用程序中使用的应用程序组。
启用应用程序组后,应用程序扩展及其包含的应用程序都可以使用NSUserDefaults
API共享对用户首选项的访问。要启用此共享,请使用initWithSuiteName:方法实例化一个新的NSUserDefaults对象,并传入共享组的标识符。
有关更多信息,请参阅: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
标准或套房名称?
对于仅用于主机应用程序的数据使用标准之一。将suiteName用于要在Extension和Host
App之间共享的数据。只是不要在两个数据中都保留相同的数据。避免数据冗余。根据上下文使用它们两者。
问题内容: 假设我有一个要注入到config中的模块: 有两个子模块: 这是第一个: 第二个是相同的,以简化示例: 您会注意到,您可以将它们作为提供者来访问以配置选项: 如果我们在控制器中,则可以覆盖每个范围,例如: 但是,如果他们总是共享相同的财产怎么办?如何在提供商之间共享某些东西? 我可以同时为和注入和配置共享属性吗? 如何同时访问和作为单个模块的扩展? 问题答案: 将模块插入两个共享这些属
问题内容: 我们正在考虑将ci从jenkins迁移到gitlab。我们有几个项目具有相同的构建工作流程。现在,我们使用一个定义了管道的共享库,而项目内部的jenkinsfile仅调用在共享库中定义的定义实际管道的方法。因此,仅需在单个点上进行更改即可影响多个项目。 我想知道gitlab ci是否也可以做到?据我发现,无法在存储库外部定义gitlab- ci.yml。还有另一种定义管道并与几个项目共
问题内容: 是否有个好方法可以在Gunicorn工人之间共享多处理锁?我正在尝试用Flask写一个json API。一些API调用将与管理正在运行的进程的python类交互(例如用于视频转换的ffmpeg)。当我将网络工作者的数量增加到超过1个时,如何确保只有1个工作者同时与班级互动? 我最初的想法是使用multiprocessing.Lock,以便start()函数可以是原子的。我认为我没有找到
问题内容: 嗨,我正在使用Docker部署一些服务,在这里我想在不同的Docker容器之间共享Docker卷。 假设我有一个Docker容器A在/ data挂载了一个卷。这是A的Dockerfile 据我了解,这会将一个卷附加到容器,但不会将主机目录装载到该容器。因此,该卷内的数据仍位于容器A内。 我有另一个提供ftp服务的容器B。它访问卷/ public下的数据。B的Dockerfile是 现在
问题内容: 我正在尝试使用部分函数,以便pool.map()可以定位具有多个参数(在本例中为Lock()对象)的函数。 这是示例代码(摘自我之前的问题的答案): 但是,当我运行此代码时,出现错误: 我在这里想念什么?如何在子流程之间共享锁? 问题答案: 您不能将普通对象传递给方法,因为它们不能被腌制。有两种方法可以解决此问题。一种是创建并传递一个: 不过,这有点重量级;使用需要产生另一个进程来
问题内容: 我有一个下载器功能,可以并行下载多个文件。我使用以便下载同一文件的不同块。我想显示下载的状态栏。为此,我需要知道已经下载的总字节数()。 是否有一种方法可以设置将在所有这些进程和主进程之间共享的变量,以便每个进程都可以追加刚刚下载的字节数? 问题答案: 解决方案是利用新进程并传递共享的ctypes值: