Core data 如何处理SwiftUI视图之间的主/明细核心数据
我正在处理如何将主视图中选择的参数传递给详细视图中的CoreData谓词的问题。我有这个主视图Core data 如何处理SwiftUI视图之间的主/明细核心数据,core-data,swiftui,master-detail,Core Data,Swiftui,Master Detail,我正在处理如何将主视图中选择的参数传递给详细视图中的CoreData谓词的问题。我有这个主视图 struct ContentView: View { @State private var selectedCountry: Country? @State private var showSetting = false @FetchRequest(entity: Country.entity(), sortDescriptors: [NSSortDescriptor(
struct ContentView: View {
@State private var selectedCountry: Country?
@State private var showSetting = false
@FetchRequest(entity: Country.entity(),
sortDescriptors: [NSSortDescriptor(keyPath: \Country.cntryName, ascending: true)]
) var countries: FetchedResults<Country>
var body: some View {
NavigationView {
VStack {
Form {
Picker("Pick a country", selection: $selectedCountry) {
ForEach(countries, id: \.self) { country in
Text(country.cntryName ?? "Error").tag(country as Country?)
}
}
if selectedCountry != nil {
Years(cntryName: selectedCountry?.cntryName! ?? "")
}
}
}
.navigationBarTitle("UNECE Data")
.navigationBarItems(trailing: Button("Settings", action: {
self.showSetting.toggle()
}))
}
.sheet(isPresented: $showSetting) {
SettingsView(showSetting: self.$showSetting)
}
}
}
ContentView结构的。如果我对行进行注释,错误将消失
@State private var result: NSFetchRequestResult
在几年内,结构,但它显然会导致另一个错误。所以我迷路了。请问这里的推荐做法是什么?
谢谢。多亏了这篇文章,我终于找到了路
struct Years:视图{
var请求:FetchRequest
var结果:FetchedResults{
request.wrappedValue
}
@国家私有变量selectedDataRow:数据?
init(cntryName:String){
self.request=FetchRequest(实体:Data.entity(),
sortDescriptors:[NSSortDescriptor(键路径:\Data.dataYear,升序:true)],
谓词:NSPredicate(格式:“dataCountry==%@”,cntryName),动画:。默认值)
}
var body:一些观点{
VStack{
选择器(“年”,选择:$selectedDataRow){
ForEach(result,id:\.self){dataRow in
文本(dataRow.dataYear???“不适用”).tag(dataRow作为数据?)
}
}
.pickerStyle(WheelPickerStyle())
.frame(宽度:CGFloat(UIScreen.main.bounds.width),高度:CGFloat(100))
.clipped()
VStack(对齐:。前导,间距:10){
HStack{
案文(“全面辩论:”)
.alignmentGuide(.leading){中的维度
10
}
如果选择数据行!=nil{
文本(字符串(描述:selectedDataRow!.dataTotalPopulation))
}否则{
正文(“不适用”)
}
}
}}
}
}
Years(cntryName: selectedCountry?.cntryName! ?? "")
@State private var result: NSFetchRequestResult
struct Years: View {
var request: FetchRequest<Data>
var result: FetchedResults<Data> {
request.wrappedValue
}
@State private var selectedDataRow: Data?
init(cntryName: String) {
self.request = FetchRequest(entity: Data.entity(),
sortDescriptors: [NSSortDescriptor(keyPath: \Data.dataYear, ascending: true)],
predicate: NSPredicate(format: "dataCountry == %@", cntryName), animation: .default)
}
var body: some View {
VStack {
Picker("Year", selection: $selectedDataRow) {
ForEach(result, id: \.self) { dataRow in
Text(dataRow.dataYear ?? "N/A").tag(dataRow as Data?)
}
}
.pickerStyle(WheelPickerStyle())
.frame(width: CGFloat(UIScreen.main.bounds.width), height: CGFloat(100))
.clipped()
VStack(alignment: .leading, spacing: 10) {
HStack {
Text("Total polutation: ")
.alignmentGuide(.leading) { dimension in
10
}
if selectedDataRow != nil {
Text(String(describing: selectedDataRow!.dataTotalPopulation))
} else {
Text("N/A")
}
}
}}
}
}