在iOS 14的SwiftUI主应用程序和小部件之间共享数据
如何从我的主应用程序获取数据到小部件?您可以为您的小部件和应用程序添加AppGroup功能(这是如何添加它的一个很好的解释)在iOS 14的SwiftUI主应用程序和小部件之间共享数据,swift,swiftui,widget,ios14,widgetkit,Swift,Swiftui,Widget,Ios14,Widgetkit,如何从我的主应用程序获取数据到小部件?您可以为您的小部件和应用程序添加AppGroup功能(这是如何添加它的一个很好的解释) 用户默认值 而不是 @main struct ClockWidgetExt: Widget { private let kind: String = "ClockWidgetExt" public var body: some WidgetConfiguration { StaticConfiguration
用户默认值 而不是
@main
struct ClockWidgetExt: Widget {
private let kind: String = "ClockWidgetExt"
public var body: some WidgetConfiguration {
StaticConfiguration(kind: kind, provider: Provider(), placeholder: PlaceholderView()) { entry in
HomeTestView()
}
.configurationDisplayName("My Widget")
.description("This is an example widget.")
}
}
只需为您的应用程序组使用共享的UserDefaults
:
UserDefaults.standard
然后,您可以使用共享文件容器,如本答案中所述:
let someFileURL = containerURL.appendingPathComponent("SomeFile.txt")
然后,您可以使用共享的CoreData容器,如本答案中所述:
下面是一个包含不同小部件示例的示例,其中包括应用程序组小部件。您可以为您的小部件和应用程序添加AppGroup功能(这是如何添加它的一个很好的说明)
用户默认值 而不是
@main
struct ClockWidgetExt: Widget {
private let kind: String = "ClockWidgetExt"
public var body: some WidgetConfiguration {
StaticConfiguration(kind: kind, provider: Provider(), placeholder: PlaceholderView()) { entry in
HomeTestView()
}
.configurationDisplayName("My Widget")
.description("This is an example widget.")
}
}
只需为您的应用程序组使用共享的UserDefaults
:
UserDefaults.standard
然后,您可以使用共享文件容器,如本答案中所述:
let someFileURL = containerURL.appendingPathComponent("SomeFile.txt")
然后,您可以使用共享的CoreData容器,如本答案中所述:
下面是一个不同的小部件示例,包括应用程序组小部件。一个简单的方法是将应用程序和小部件添加到同一个应用程序组,然后从位于该应用程序组容器中的UserDefaults存储(而不是应用程序的默认UserDefaults存储)存储和检索数据。 您可以通过使用初始化UserDefaults来访问应用程序组的此共享存储
let storeURL = containerURL.appendingPathComponent("DataModel.sqlite")
let description = NSPersistentStoreDescription(url: storeURL)
let container = NSPersistentContainer(name: "DataModel")
container.persistentStoreDescriptions = [description]
container.loadPersistentStores { ... }
而不是使用
UserDefaults.standard
提供此过程详细信息的更全面描述。一种简单的方法是将应用程序和小部件添加到同一应用程序组,然后从位于该应用程序组容器中的UserDefaults存储(而不是应用程序的默认UserDefaults存储)存储和检索数据。 您可以通过使用初始化UserDefaults来访问应用程序组的此共享存储
let storeURL = containerURL.appendingPathComponent("DataModel.sqlite")
let description = NSPersistentStoreDescription(url: storeURL)
let container = NSPersistentContainer(name: "DataModel")
container.persistentStoreDescriptions = [description]
container.loadPersistentStores { ... }
而不是使用
UserDefaults.standard
对该过程的详细信息进行了更全面的描述。您能告诉我将代码(共享CoreData容器)放在哪里吗。如果可以,请共享一段代码片段,其中显示了小部件中的获取部分。@umayanga这里实际上没有小部件特定的内容。创建持久容器的方式与在标准应用程序中相同(只需显式指定sqlite文件的位置)。这同样适用于提取部分。您可以从持久容器访问上下文,并使用它执行提取请求。但由于这可能仍然令人困惑,我在你的帖子下面添加了一个更详细的解释。你能告诉我把代码(共享CoreData容器)放在哪里吗。如果可以,请共享一段代码片段,其中显示了小部件中的获取部分。@umayanga这里实际上没有小部件特定的内容。创建持久容器的方式与在标准应用程序中相同(只需显式指定sqlite文件的位置)。这同样适用于提取部分。您可以从持久容器访问上下文,并使用它执行提取请求。但由于这可能仍然令人困惑,我在你的帖子下面添加了一个更详细的解释。