@Environment(\.managedObjectContext) private var viewContext
@FetchRequest(
entity: ListStruct.entity(),
sortDescriptors: [NSSortDescriptor(keyPath: \ListStruct.name, ascending: true)],
predicate: NSPredicate(format: "parentfolder == %@", parentFolder),
animation: .default)
private var lists: FetchedResults<ListStruct>
var parentFolder: FolderStruct
有兩個物體:FolderStruct 和 ListStruct。我用兩個物體制作了一個樹結構。我正在使用此代碼的視圖接收“var parentFolder:FolderStruct”作為引數。
FolderStruct 和 ListStruct 之間的關系是對多的,這意味著一個 folderStruct 可以容納許多 ListStruct。FolderStruct 有一個名為“childlists”的對多關系,而 ListStruct 有一個名為“parentfolder”的對一關系。
取ListStructs時,想過濾父檔案夾關系為引數parentFolder的ListStructs。但是,上面的代碼會出錯,提示“無法在屬性初始化程式中使用實體成員 'parentFolder';屬性初始化程式在 'self' 可用之前運行”。我該如何解決這個問題?
uj5u.com熱心網友回復:
您可以將要在 fetch 中使用的引數提供給View's init,如下所示:
private var fetchRequest : FetchRequest<Item>
private var items: FetchedResults<Item> {
fetchRequest.wrappedValue
}
init(folder: Folder) {
fetchRequest = FetchRequest(sortDescriptors: [NSSortDescriptor(keyPath: \Item.name, ascending: true)],
predicate: NSPredicate(format: "folder == %@", folder),
animation: .default)
}
正如您所知,由于FetchRequest中的一個錯誤,即使沒有任何更改,每次該 View 初始化時都會呼叫 body func,因此您可能希望將其包裝在另一個View中,將其folder作為一個保護層.
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/451003.html
上一篇:如何重用應用于文本視圖的部分代碼(識別器、工具列)?
下一篇:在視圖中設定所有變數
