Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Core data 通过忽略没有相关实体的实体的关系,形成具有标题标题的核心数据实体列表_Core Data_Swiftui - Fatal编程技术网

Core data 通过忽略没有相关实体的实体的关系,形成具有标题标题的核心数据实体列表

Core data 通过忽略没有相关实体的实体的关系,形成具有标题标题的核心数据实体列表,core-data,swiftui,Core Data,Swiftui,我试图以一种形式显示核心数据信息。这些实体具有一对多关系。为了演示的目的,我制作了一个应用程序,它有制造商和两种产品,链轮和小部件。制造商是唯一的,链轮和小部件对许多人来说是唯一的。制造商是唯一的,因此不能复制 我可以获取数据,显示在节标题中列出制造商名称的位置,下面是产品。我遇到的问题是,虽然每个制造商要么生产链轮,要么生产小部件,或者两者都生产,但它们并不都生产。所以,当我列出这些数据时,我最后得到的是没有任何产品的制造商的部分标题。您可以在以下屏幕截图中看到Cogswell不制作小部件,而

我试图以一种形式显示核心数据信息。这些实体具有一对多关系。为了演示的目的,我制作了一个应用程序,它有制造商和两种产品,链轮和小部件。制造商是唯一的,链轮和小部件对许多人来说是唯一的。制造商是唯一的,因此不能复制

我可以获取数据,显示在节标题中列出制造商名称的位置,下面是产品。我遇到的问题是,虽然每个制造商要么生产链轮,要么生产小部件,或者两者都生产,但它们并不都生产。所以,当我列出这些数据时,我最后得到的是没有任何产品的制造商的部分标题。您可以在以下屏幕截图中看到Cogswell不制作小部件,而Gotrockets不制作链轮:

我不希望在widgets列表中显示Cogswell,而在sprockets列表中不显示Gotrockets,我不知道如何构造、过滤或使用谓词来实现这一点。我还试图再次返回正确的信息,但当我试图不返回没有产品的制造商的视图时,编译器会犹豫,这是可以理解的。我目前的代码是:

struct ContentView: View {
@Environment(\.managedObjectContext) var managedObjectContext

@FetchRequest(entity: Manufacturer.entity(), sortDescriptors: []) var manufacturers: FetchedResults<Manufacturer>

private var numberFormatter: NumberFormatter {
    let formatter = NumberFormatter()
    formatter.numberStyle = .decimal
    return formatter
}

private var measurementFormatter: MeasurementFormatter {
    let formatter = MeasurementFormatter ()
    formatter.unitStyle = .short
    return formatter
}


var body: some View {
    NavigationView {
        Form {

            Text("Widgets:")
            ForEach(manufacturers, id: \.self) { manufacturer in
                Section(header: Text(manufacturer.wrappedName)) {
                    ForEach(manufacturer.wrappedManufacturerOfWidget, id: \.self) { widget in
                        Text("\(widget.wrappedTitle)")
                    }
                }
            }

            Text("Sprockets:")
            ForEach(manufacturers, id: \.self) { manufacturer in
                Section(header: Text(manufacturer.wrappedName)) {
                    ForEach(manufacturer.wrappedManufacturerOfSprocket, id: \.self) { sprocket in
                        Text("\(sprocket.wrappedTitle)")
                    }
                }
            }

            Button("Add Data") {
                let spacely = Manufacturer(context: self.managedObjectContext)
                spacely.name = "Spacely"

                let cogswell = Manufacturer(context: self.managedObjectContext)
                cogswell.name = "Cogswell"

                let gotrockets = Manufacturer(context: self.managedObjectContext)
                gotrockets.name = "Gotrockets"

                let colossalSprocket = Sprocket(context: self.managedObjectContext)
                colossalSprocket.id = UUID()
                colossalSprocket.sprocketMadeBy = spacely
                colossalSprocket.title = "Colossal Sprocket"

                let cogSprocket = Sprocket(context: self.managedObjectContext)
                cogSprocket.id = UUID()
                cogSprocket.sprocketMadeBy = cogswell
                cogSprocket.title = "CogSprocket"

                let whizzoWidget = Widget(context: self.managedObjectContext)
                whizzoWidget.id = UUID()
                whizzoWidget.widgetMadeBy = gotrockets
                whizzoWidget.title = "Whizzo Widget"

                let uniblabWidget = Widget(context: self.managedObjectContext)
                uniblabWidget.id = UUID()
                uniblabWidget.widgetMadeBy = spacely
                uniblabWidget.title = "Uniblab"

                try? self.managedObjectContext.save()
            }
        }

        .navigationBarTitle("Products")
    }
}
}
struct ContentView:View{
@环境(\.managedObjectContext)变量managedObjectContext
@FetchRequest(实体:Manufacturer.entity(),sortDescriptors:[])变量manufacturers:FetchedResults
私有变量numberFormatter:numberFormatter{
let formatter=NumberFormatter()
formatter.numberStyle=.decimal
返回格式化程序
}
专用var度量格式:度量格式{
let formatter=MeasurementFormatter()
formatter.unitStyle=.short
返回格式化程序
}
var body:一些观点{
导航视图{
形式{
文本(“小部件:”)
ForEach(制造商,id:\.self){中的制造商
节(标题:文本(manufacturer.wrappedName)){
ForEach(manufacturer.wrappedManufacturerOfWidget,id:\.self){widget中的widget
文本(“\(widget.wrappedTitle)”)
}
}
}
文本(“链轮:”)
ForEach(制造商,id:\.self){中的制造商
节(标题:文本(manufacturer.wrappedName)){
ForEach(manufacturer.wrappedManufacturerOfSprocket,id:\.self){sprocket in
文本(“\(sprocket.wrappedTitle)”)
}
}
}
按钮(“添加数据”){
设spacely=Manufacturer(上下文:self.managedObjectContext)
spacely.name=“spacely”
让cogswell=制造商(上下文:self.managedObjectContext)
cogswell.name=“cogswell”
设gotrockets=Manufacturer(上下文:self.managedObjectContext)
gotrockets.name=“gotrockets”
让ColosalSprocket=Sprocket(上下文:self.managedObjectContext)
ColosalSprocket.id=UUID()
巨像链轮.sprocketMadeBy=spacely
巨人链轮。title=“巨人链轮”
让cogSprocket=Sprocket(上下文:self.managedObjectContext)
cogsporlet.id=UUID()
cogSprocket.sprocketMadeBy=cogswell
cogsporlet.title=“cogsporlet”
让whizzoWidget=Widget(上下文:self.managedObjectContext)
whizzoWidget.id=UUID()
whizzoWidget.widgetMadeBy=gotrockets
whizzoWidget.title=“Whizzo小部件”
让uniblabWidget=Widget(上下文:self.managedObjectContext)
uniblabWidget.id=UUID()
uniblabWidget.widgetMadeBy=spacely
uniblabWidget.title=“Uniblab”
try?self.managedObjectContext.save()
}
}
.navigationBarTitle(“产品”)
}
}
}

我已经搜索过了,但还没有找到解决这个问题的办法。提前感谢。

您需要筛选
制造商
,以排除小部件(或链轮)计数为零的制造商。大概是这样的:

ForEach(manufacturers.filter( { $0.wrappedManufacturerOfWidget.count > 0 }), id: \.self) { manufacturer in

同样,在链轮的
ForEach
中。

我没有想到过滤。依靠ForEach。现在我觉得自己很愚蠢。谢谢你给我指明了正确的方向。它很有魅力,很简单。