Swiftui 显示包含核心数据bool的.sheet

Swiftui 显示包含核心数据bool的.sheet,swiftui,Swiftui,我有一张显示我的应用程序指南的表格。 这张表由当地的图书展示指南提供。 我希望本地bool使用bool showGuide在我的设置实体中镜像核心数据中的bool 一般来说,我知道如何保存和检索bool的状态,但在应用程序启动时检索核心数据中的bool是我遇到的难题 当用户点击按钮“明白了!”我希望导游再也不来了。(也许我可以在设置视图中设置一个按钮,如果他们需要刷新,可以再次激活该按钮) 我尝试过使用测试视图的自定义初始化器,该初始化器尝试检索settings.showGuide,但没有成功

我有一张显示我的应用程序指南的表格。 这张表由当地的图书展示指南提供。 我希望本地bool使用bool showGuide在我的设置实体中镜像核心数据中的bool

一般来说,我知道如何保存和检索bool的状态,但在应用程序启动时检索核心数据中的bool是我遇到的难题

当用户点击按钮“明白了!”我希望导游再也不来了。(也许我可以在设置视图中设置一个按钮,如果他们需要刷新,可以再次激活该按钮)

我尝试过使用测试视图的自定义初始化器,该初始化器尝试检索settings.showGuide,但没有成功

我也知道设置是一个数组,所以我必须始终保存并检索设置数组中的第一项。有没有更简单的方法?是否保存一个实体而不是数组

有什么想法吗

import Foundation
import SwiftUI
import CoreData


struct Test: View {

    @Environment(\.managedObjectContext) var managedObjectContext
    @FetchRequest(fetchRequest: Settings.getSettings()) var settings:FetchedResults<Settings>

    @State private var showingGuide = true

    var body: some View{

        VStack{
            Text("Hello")
        }
        .sheet(isPresented: $showingGuide) {

            MainGuide().padding(.horizontal)

            Button(action: {
                let settings = Settings(context: self.managedObjectContext)
                settings.showGuide = false
                self.showingGuide = false
                do {
                    try self.managedObjectContext.save()
                }catch{
                    print(error)
                }
            }){
                Text("Got it!")

            }.padding()
        }
    }


}
<代码>导入基础 导入快捷键 导入CoreData 结构测试:视图{ @环境(\.managedObjectContext)变量managedObjectContext @FetchRequest(FetchRequest:Settings.getSettings())变量设置:FetchedResults @国家私有var showingGuide=true var body:一些观点{ VStack{ 文本(“你好”) } .表(显示:$showingGuide){ MainGuide().填充(.卧式) 按钮(操作:{ let settings=settings(上下文:self.managedObjectContext) settings.showGuide=false self.showingGuide=false 做{ 请尝试self.managedObjectContext.save() }抓住{ 打印(错误) } }){ 文本(“明白了!”) }.padding() } } }


您不应该以编程方式设置
@状态
-变量()。相反,使用取决于
CoreData
-对象中的布尔值的
if
-语句来显示工作表或不显示工作表

我还建议为settings对象添加一个计算变量,因为它始终是数组中的第一个元素,如下面代码
var settings
所示

您可以这样做:

struct ContentView:View{
@环境(\.managedObjectContext)变量managedObjectContext
@获取请求(
实体:设置。实体(),
sortDescriptors:[
NSSortDescriptor(密钥路径:\Settings.self,升序:false)
]
)var设置请求:获取结果
变量设置:设置{
设置请求[0]
}
@状态变量showGuide:Bool=true
var body:一些观点{
VStack{
if settings.showSheet{
文本(“显示工作表:\(字符串(settings.showSheet))”)。工作表(显示:$showGuide){
文本(“来自工作表的您好”)
按钮(操作:{
self.settings.showSheet=false
self.showGuide=false
做{
请尝试self.managedObjectContext.save()
}抓住{
打印(错误)
}
}){
文本(“明白了!”)
}.padding()
}
}否则{
案文(“已商定”)
}
}
}
}

注意:这将仅在用户单击按钮时将设置设置设置为true。通过滑动解除工作表时,它不会更新CoreData。如果您想对刷卡操作执行某些操作,可以使用
.onDismiss(perform:{})

谢谢您的回复!是的,我可以在视图中单击按钮时轻松保存核心数据。但我的问题是在加载ContentView时检查设置实体中的bool是的,我有你的问题,这正是代码所做的。仅当设置对象中的布尔值设置为true时,才会显示工作表。