使用SwiftUI处理CoreData中Header/Detail视图的正确方式



我有一个NavigationView,它调用了具有标头记录的NavigationLink,然后应该显示标头信息和详细信息。但是,当我调用FetchRequest获取详细信息时,我会得到Cannot use instance member 'header' within property initializer; property initializers run before 'self' is available-以下是相关代码:

struct ViewDetailsView: View {
@Environment(.managedObjectContext) var moc
@FetchRequest(
entity: Detail.entity(),
sortDescriptors: [NSSortDescriptor(keyPath: Detail.description, ascending: true)],
predicate: NSPredicate(format: "%K == %@", #keyPath(Detail.header), header)
) private var details: FetchedResults<Event>    
var header: Header
var body: some View {
VStack{
Text("(header.firstName ?? "no first name") (header.lastName ?? "no last name")")
.padding()
List {
ForEach(details) {
detail in
Text("(detail.description ?? "Unknown description")")
}
}
}
}
}

我通过Headers视图中的NavigationLink调用此视图:

NavigationView {
List {
ForEach(headers) {
header in
NavigationLink(destination: ViewDetailsView(header: header)) {
Text("(header.firstName ?? "no first name") (header.lastName ?? "no last name")") 
// ADD @FETCHREQUEST for DETAIlS here and pass to ViewDetailsView?
}
}
.onDelete(perform: deleteHeader)
}
}

我试图在上面(注释所在的位置(添加细节提取,但最终得到了与第一个视图相同的错误(上面的第一个代码段(。如何使用CoreData在SwiftUI中正确处理Header/Details挑战,以便在Details View 中实际需要它们之前,不会将所有详细记录加载到Header列表(NavigationView(中

谢谢@Asperi-这是我一直在寻找的帮助。。以下是如何在细节视图中解决的-

init(header: Header) {
self.header = header
let request: NSFetchRequest<Details> = Details.fetchRequest()
request.sortDescriptors = [NSSortDescriptor(keyPath: Details.eventDate, ascending: true), NSSortDescriptor(keyPath: Details.event, ascending: true)]
request.predicate =  NSPredicate(format: "%K == %@", #keyPath(Details.header), header)

_events = FetchRequest<Event>(fetchRequest: request)
}

最新更新