为什么核心数据不通过扩展检索关系值?

问题描述 投票:0回答:1

我在核心数据、计划和地点中有 2 个实体。它们以一对多的关系(计划中的一个事件(“太空山”)与“魔法王国”中的多个事件相关联)。

期望用户可以点击一个项目,比如“太空山”,选择一个日期,然后将该项目和所选日期添加到行程中。行程显示“魔法王国”,我也已成功将其添加到 Places 实体中。

一切正常,除了从关系中恢复。标题和日期(存储在 Plans 中)显示正常 👍,但关联的位置和公园(存储在 Places 中)返回我的零字符串 👎。

知道我做错了什么吗?我已经回顾了所有的视频和书籍,一切对我来说都是正确的。谢谢 - 还是新的。

    
       let plans: Plans
       var body: some View {
        
            HStack(alignment: .top) {
                
                VStack(alignment: .leading, spacing: 2) {
                    Text(plans.extTitle)
                        .bold()
                    Text("\(plans.extDate, style: .date)")
                        .font(.caption2)
                    Text(plans.extLocation)
                        .font(.caption2)
                    Text(plans.extPark)
                        .font(.caption2)

值从扩展返回(placesrel 是关系的名称):

extension Plans {
    
    var extTitle: String {
        return title ?? "Undefined"
    }
    var extDate: Date {
        return date ?? Date()
    }
    var extLocation: String {
        return placesrel?.location ?? "Error Retrieving Through Extension"
    }
    var extPark: String {
        return placesrel?.park ?? "Error Retrieving Through Extension"
    }

数据都是从结构中提取的,如果这很重要(无需从用户输入,只需点击)

var rides = [
    Ride(index: 1, name: "Space Mountain", location: "Tomorrowland", park: "Magic Kingdom"),
    Ride(index: 2, name: "People Mover", location: "Tomorrowland", park: "Magic Kingdom"),
]

我已经创建了一个测试视图并通过 ForEach 循环调用了“location”和“park”条目,并且显示了正确的数据,表明它已成功写入核心数据。只是检索时的关系被破坏了。

我还尝试创建手动代码生成 NSManagedObject 子类,就像this 视频所建议的那样,我已经看过很多次了,我觉得我非常了解 Paul Hudson 和他的狗。

感谢任何解决这个问题的帮助!

swift core-data one-to-many entity-relationship
1个回答
0
投票

感谢评论,我想通了这个问题。我正在发布解决方案,以防它可以帮助其他人。

我让这种方式变得比需要的更复杂。事实证明,我不需要 2 个实体之间有关系。 1 实体工作得很好,因为它只是包含额外的细节,我只是按日期排序。

我认为这里的要点是,问问自己是否真的需要 2 个实体作为开始。

© www.soinside.com 2019 - 2024. All rights reserved.