与 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 共享数据的主要内容,如果未能解决你的问题,请参考以下文章

iOS 13 如何将 UIDocumentPickerViewController 与 App Group 一起使用?

如何在应用程序和它的扩展之间共享一个类?

带有核心数据的 iOS Today 扩展

iOS 共享扩展在部署后不起作用

移除 App 不会移除 App Group 数据

数据共享 如何与读者帐户共享 UDF?