【问题标题】:Sharing Data with AppGroup与 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
  • 我不得不承认我不明白这个人在解释什么。他是在创建一个文本文件并将数据存储在那里吗?

标签: swift swiftui widgetkit


【解决方案1】:
  1. 将数据保存到主应用中的UserDefaults
UserDefaults(suiteName: <your_app_group>)!.set("test", forKey: "test")
  1. 从您的小部件中的UserDefaults 读取数据:
let testStr = UserDefaults(suiteName: <your_app_group>)!.string(forKey: "test")

如果要保存其他类型,请参阅:

【讨论】:

  • 成功了,谢谢。这比我坚持的要简单得多。我使用 Main 应用程序作为 SwiftUI 和 Widget 作为 SwiftUI 对其进行了测试。我明天会检查这是否也适用于我的主应用程序作为故事板和小部件作为 SwiftUI。
猜你喜欢
  • 2012-12-11
  • 1970-01-01
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
相关资源
最近更新 更多