与 AppGroup 共享数据
Posted
技术标签:
【中文标题】与 AppGroup 共享数据【英文标题】:Sharing Data with AppGroup 【发布时间】:2020-09-21 15:52:12 【问题描述】:我想将我的 UIKit 文件中的一个变量共享到使用 SwiftUI 创建的小部件扩展中。 I followed this here.请看J Arango的回答。
但我不明白那里的最后一部分。
我必须使用import MySharedObjects
。
所以我这样做了:
import MySharedObject
struct testing
let mySharedObject = MySharedObject(name: "My Name", lastName: "My Last Name")
do
let data = try JSONEncoder().encode(mySharedObject)
/// Make sure to use your "App Group" container suite name when saving and retrieving the object from UserDefaults
let container = UserDefaults(suiteName:"group.com.widgetTest.widgetContainer")
container?.setValue(data, forKey: "sharedObject")
/// Used to let the widget extension to reload the timeline
WidgetCenter.shared.reloadAllTimelines()
catch
print("Unable to encode WidgetDay: \(error.localizedDescription)")
但我收到以下错误。
调用中#1、#2 位置的额外参数 调用中的参数缺少参数 插入自: 我使用do
部分的预期声明。
【问题讨论】:
这可能会对您有所帮助:Share data between main App and Widget in SwiftUI for ios 14 如果它只是一个变量,您可以使用共享的UserDefaults
。为什么需要MySharedObjects
?
我不得不承认我不明白这个人在解释什么。他是在创建一个文本文件并将数据存储在那里吗?
【参考方案1】:
-
将数据保存到主应用中的
UserDefaults
:
UserDefaults(suiteName: <your_app_group>)!.set("test", forKey: "test")
-
从您的小部件中的
UserDefaults
读取数据:
let testStr = UserDefaults(suiteName: <your_app_group>)!.string(forKey: "test")
如果要保存其他类型,请参阅:
How can I use UserDefaults in Swift?【讨论】:
成功了,谢谢。这比我坚持的要简单得多。我使用 Main 应用程序作为 SwiftUI 和 Widget 作为 SwiftUI 对其进行了测试。我明天会检查这是否也适用于我的主应用程序作为故事板和小部件作为 SwiftUI。以上是关于与 AppGroup 共享数据的主要内容,如果未能解决你的问题,请参考以下文章