我在核心数据、计划和地点中有 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 和他的狗。
感谢任何解决这个问题的帮助!
感谢评论,我想通了这个问题。我正在发布解决方案,以防它可以帮助其他人。
我让这种方式变得比需要的更复杂。事实证明,我不需要 2 个实体之间有关系。 1 实体工作得很好,因为它只是包含额外的细节,我只是按日期排序。
我认为这里的要点是,问问自己是否真的需要 2 个实体作为开始。