gpt4 book ai didi

swift - 以后如何在环境中更新 ManagedObjectContext

转载 作者:行者123 更新时间:2023-12-04 08:40:36 28 4
gpt4 key购买 nike

我有一个基本的 SwiftUI 应用程序,它初始化了 NSPersistentCloudKitContainer在应用程序启动时基于持久堆栈并将 viewContext 注入(inject)环境并将其传递给我的应用程序的所有 View 。这按预期工作。 PersistentContainer 默认配置为与 CloudKit 同步。
现在我想为用户提供一种在应用设置中切换 iCloud 同步的方法,我通过设置 cloudKitContainerOptions 来实现。在 StoreDescription 中为零并重新初始化持久堆栈。
问题是现在 Environment 中的 ManagedObjectContext 已经过时了,也需要重新注入(inject)。有谁知道如何做到这一点?
我在 App 结构中有我的 UserSettings ObservableObject 但我不确定如何触发 View 的重新注入(inject):

@main
struct MyApp: App {
[...]

@ObservedObject private var userSettings: UserSettings
private let persistenceController: PersistenceController

var body: some Scene {
WindowGroup {
let service1 = Service1(context: persistenceController.container.viewContext)
let service2 = Service2(context: persistenceController.container.viewContext)

HomeTabView()
.environment(\.managedObjectContext, persistenceController.container.viewContext)
.environmentObject(service1)
.environmentObject(service2)

}
}
}
或者是否可以在不重新初始化整个 NSPersistentCloudKitContainer 的情况下切换 iCloud 同步? ?

最佳答案

您可以根据您的 UserSettings 进行 View 重建提到的切换属性,比如

HomeTabView()
.environment(\.managedObjectContext, persistenceController.container.viewContext)
.environmentObject(service1)
.environmentObject(service2)
.id(userSettings.your_toggle_Sync_Property) // << here !!
因此,一旦属性更改, View 将被重建,因为观察到属性,并且将注入(inject)新的上下文。

关于swift - 以后如何在环境中更新 ManagedObjectContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64585644/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com