在 iOS 14 中的主应用程序和小部件之间共享 UserDefaults

Posted

技术标签:

【中文标题】在 iOS 14 中的主应用程序和小部件之间共享 UserDefaults【英文标题】:Sharing UserDefaults between main app and Widget in iOS 14 【发布时间】:2020-07-22 13:30:46 【问题描述】:

我正在为 ios 编写一个小部件,似乎在小部件中无法访问 UserDefaults,我添加了应用程序组如下,仍然是 nil:

let prefs = UserDefaults(suiteName:"group.myco.myapp")

当我尝试从 prefs 中读取我在主应用程序中设置的内容时,这里还是 nil。

【问题讨论】:

您是否在主应用程序中以相同的方式使用 UserDefaults?我的意思是:UserDefaults(suiteName:"group.myco.myapp") 你确定你的组名在所有应该设置的地方都设置了? 我有同样的问题,是的,我确信组名在两者中都设置正确。 【参考方案1】:

您需要将 AppGroup 功能添加到小部件目标。选择项目,然后选择小部件目标,转到 Signing & Capabilities 选项卡,然后单击 + Capability 按钮。然后选择AppGroup 并使用您的群组进行配置。

【讨论】:

【参考方案2】:

正如@Ilya Muradymov 评论的打击

如果要获取widget和容器app之间的数据,需要先设置对应组UserDefault的数据:

 //object-C     
 [[NSUserDefaults.alloc initWithSuiteName:@"group.com.your.groupname"] setObject:mObject forKey:@"xxxxxxxx"];
 //swift
 UserDefaults(suiteName:"group.com.your.groupname").set(mObject, forKey: "xxxxxxxx")

【讨论】:

以上是关于在 iOS 14 中的主应用程序和小部件之间共享 UserDefaults的主要内容,如果未能解决你的问题,请参考以下文章

如何在活动和小部件之间共享数据?

在 Swift 中的主 App 和 Today 小部件/扩展之间共享 UI 元素

如何在活动和小部件之间共享数据和方法

活动/服务和小部件提供者之间的通信?

在主机应用程序和今天的扩展程序之间共享用户生成的图像的最佳方式是啥

Kivy (KivyMD) 中的按钮和小部件大小