使用由 KeyPath 构成的 SortDescriptor 对 SwiftData 查询进行排序时发生崩溃,并且链中具有可选关系

Ben*_*ker 5 key swift swift-data swift-keypath swiftui

我有以下型号:

@Model
class Game {
    var name: String
    var firstReleasedOn: Date?

    @Relationship(deleteRule: .cascade, inverse: \QueueEntry.game)
    var queueEntry: QueueEntry?

    init(
        name: String,
        firstReleasedOn: Date?
    ) {
        self.name = name
        self.firstReleasedOn = firstReleasedOn
    }
}
Run Code Online (Sandbox Code Playgroud)
@Model
public class QueueEntry {
    var game: Game?
    var createdOn: Date
    var order: Int

    init(order: Int) {
        self.createdOn = .now
        self.order = order
    }
}
Run Code Online (Sandbox Code Playgroud)

我想用List按游戏发布日期排序的所有条目填充 a ,因此我有以下内容:

struct QueueView: View {
    @Query(sort: [SortDescriptor(\QueueEntry.game?.firstReleasedOn)])
    private var entries: [LocalData.QueueEntry]
    
    var body: some View {
        List(entries) { entry in
            Text(entry.game.name ?? "")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在 Debug 中运行上面的代码是完全没问题的。但是,在 Release 中运行会引发以下错误:

SwiftData/DataUtilities.swift:65:致命错误:无法找到 \QueueEntry。<计算的 0x00000001049cd3e0 (可选)>?.<计算的 0x00000001049cd440 (可选)> 在带有字段 [SwiftData.Schema.PropertyMetadata(name: "game") 的 QueueEntry 上,键路径:\QueueEntry。<计算的0x00000001049e3814(可选)>,defaultValue:nil,元数据:nil),SwiftData.Schema.PropertyMetadata(名称:“createdOn”,键路径:\QueueEntry。<计算的0x00000001049e40e8(日期)>,defaultValue: nil,元数据:nil),SwiftData.Schema.PropertyMetadata(名称:“order”,键路径:\QueueEntry。<计算的0x00000001049e49ac(Int)>,defaultValue:nil,元数据:nil)]

QueueEntry.game需要是可选的,因为使其成为非可选并尝试在 init 中创建关系会导致Joakim Danielson在此解释的NSInvalidArgumentException推理。

这只是 SwiftData 的一个 bug/问题,需要 Apple 解决吗?Game我是否可以实施其他一些解决方法来保持和之间关系的完整性QueueEntry