与AppGroup共享数据

4
我希望能够将我UIKit文件中的一个变量分享到使用SwiftUI创建的小部件扩展中。 我遵循了这里的方法。 请查看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部分的地方预期声明。

1
这可能会对你有所帮助:在iOS 14的SwiftUI中,在主应用程序和小部件之间共享数据。如果只是一个变量,你可以使用共享的UserDefaults。那么为什么需要MySharedObjects呢? - pawello2222
我必须承认我不理解那个人在解释什么。他是在创建一个文本文件并将数据存储在那里吗? - submariner
1个回答

9
  1. 在您的主要应用程序中将数据保存到UserDefaults
UserDefaults(suiteName: <your_app_group>)!.set("test", forKey: "test")
  1. 从你的小组件中读取 UserDefaults 中的数据:
let testStr = UserDefaults(suiteName: <your_app_group>)!.string(forKey: "test")

如果您想保存其他类型,请参见:


1
它成功了,谢谢。比我想象的要简单得多。我用 SwiftUI 作为主应用程序和 SwiftUI 作为小部件进行了测试。明天我会检查一下,看看这是否也适用于我将主应用程序设置为 Storyboard,小部件设置为 SwiftUI 的情况。 - submariner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接