在 macOS 上使用@FetchRequest 的排序描述符对 Table 进行排序

Sorting a Table with @FetchRequest's sort descriptors on macOS

Apple 在 WWDC21 上推出了 Table 容器,它允许使用 SwiftUI 在 macOS 上创建多列 tables:

我们可以提供对排序描述符数组的绑定,以生成 table sortable 的列。我在这里使用 @FetchRequestsortDescriptors

struct ContentView: View {

    @Environment(\.managedObjectContext) private var viewContext

    @FetchRequest(sortDescriptors: [SortDescriptor(\.addDate, order: .reverse)], animation: .default)
    private var videos: FetchedResults<Video>

    @State
    private var selection = Set<Video.ID>()

    var body: some View {
        NavigationView {
            Table(videos, selection: $selection, sortOrder: $videos.sortDescriptors) { // <-- HERE
                TableColumn("Title") {
                    Text([=11=].title)
                }

                TableColumn("Added") {
                    Text([=11=].addDate)
                }.width(120)

                TableColumn("Published") {
                    Text([=11=].publishedAt)
                }.width(120)

                TableColumn("Duration") {
                    Text([=11=].duration)
                }.width(50)
            }
        }
    }

}

虽然编译和运行没有错误,但排序不起作用。我可以单击 table 的任何列,但没有任何反应。

我是不是遗漏了什么,或者这是 macOS 上 Table 的已知错误?

您的 TableColumn 初始值设定项需要提供一个 value 参数,该参数采用确定如何排序的 keyPath。 docs中给出的例子:

TableColumn("Given Name", value: \.givenName) { person in
    Text(person.givenName)
}

如果视图中的文本使用相同的键路径,您可以删除内容闭包:

TableColumn("Given Name", value: \.givenName)

所以在你的情况下,你应该能够做类似

的事情
TableColumn("Title", value: \.title)

……等等。