swift 我将从表单生成的数据显示到核心数据,然后将数据传递到另一个视图,但未显示正确的数据

bkhjykvo  于 2022-12-03  发布在  Swift
关注(0)|答案(1)|浏览(103)

我有一个将信息保存到核心数据的表单,然后我获取数据并将其传递到产品卡,该产品卡将被放入具有不同数据的产品卡列表中。当我单击产品卡进入卡的详细信息时,查看时数据不正确。我需要产品详细信息包括主视图中产品卡上显示的数据,而不是显示name2。我正在尝试使用 * 实现此目的 * 核心数据**。

核心数据titlesubTitle作为Strings

nametitlesubTitle将登录到我正在使用的@NSManaged public var
从另一个视图按表单显示产品卡详细信息

// this struct will be on the home screen

struct productCard: View {

    @Environment (\.managedObjectContext) var managedObjContext
    @FetchRequest(entity: DataSet.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \DataSet.name, ascending: true)])

    var dataSet: FetchedResults <DataSet>
    var body: some View {
        ScrollView {
            HStack {
                ForEach( self.dataSet, id: \.self){ DataSet in
                    NavigationLink {
                        productCardDetails(dataSet: _dataSet)
                    } label: {  
                        HStack{
                            Text(DataSet.self.title ?? "Error")
                                .font(.title3)
                                .fontWeight(.bold)
                                .foregroundColor(.red)
                            Spacer()
                            Text(DataSet.self.subTitle ?? "Error")
                                .font(.caption)
                                .foregroundColor(.red)
                        }.padding(.horizontal, 10)
                    }
                }
            }
        }
    }
}

产品卡将把用户带入productCardDetails

struct productCardDetails: View {
  @Environment (\.managedObjectContext) var managedObjContext
  @FetchRequest(sortDescriptors: []) var dataSet: FetchedResults <DataSet>

    var body: some View {
        ZStack(alignment: .bottom) {
            NavigationView {
                Form{
                    List(dataSet[0..<1], id:\.self) { DataSet in
                        Section{ 
                            Text(DataSet.self.title ?? "error")
                                .font(.title2)
                                .fontWeight(.bold)
                            Text(DataSet.self.subTitle ?? "error")
                                .font(.subheadline)
                                .fontWeight(.light)
                                .multilineTextAlignment(.leading)
                        }
                    }
                }
            }
        }
    }
}

举一个例子来演示发生了什么,当我从我拥有的表单中创建了5张卡片时,在主屏幕上它将显示5个productCard,所以它将在主视图上显示为productCard1productCard2productCard3productCard4productCard5,在这些卡片中,它们都有各自唯一的titlessubTitles。但例如,当我单击productCard4时,它将显示productCard1

ccrfmcuu

ccrfmcuu1#

好吧,你在productCardDetails视图中使用了一个集合,并且只使用了第一个条目。最好传递你想显示的DataSet

struct ProductCard: View {

    @Environment (\.managedObjectContext) var managedObjContext
    
    @FetchRequest(entity: DataSet.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \DataSet.name, ascending: true)])
    var dataSets: FetchedResults <DataSet>

    var body: some View {
            ScrollView{
                HStack{
                    ForEach( self.dataSets, id: \.self){ dataSet in
                        NavigationLink {
                            ProductCardDetails(dataSet: dataSet)
                        } label: {  HStack{
                                                Text(dataSet.title ?? "Error")
                                                    .font(.title3)
                                                    .fontWeight(.bold)
                                                    .foregroundColor(.red)
                                                Spacer()
                                                Text(dataSet.subTitle ?? "Error")
                                                    .font(.caption)
                                                    .foregroundColor(.red)
                                            }.padding(.horizontal, 10)}}}}}}}

在详细视图中:

struct ProductCardDetails: View {
      @Environment (\.managedObjectContext) var managedObjContext
      
      var dataSet: DataSet
        
        var body: some View {
            ZStack(alignment: .bottom){
                NavigationView {
                    Form{
                        Section{ Text(dataSet.title ?? "error")
                                    .font(.title2)
                                    .fontWeight(.bold)
                                Text(dataSet.subTitle ?? "error")
                                    .font(.subheadline)
                                    .fontWeight(.light)
                                    .multilineTextAlignment(.leading)}}}}}}

您确实需要开始使用默认命名约定。

  • 变量名的lowersize
  • 类型名称的大写
  • 多元集合

相关问题