作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个基本的 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/
命令 svn status 返回如下内容: ? SomeClient\BUTCHERED.docx M SomeClient\Development notes.txt ?
我是一名优秀的程序员,十分优秀!