有没有办法使用EnvironmentOjbect作为NSPredicate来创建FetchRequest?我读了Paul Hudson的这篇文章,这很棒,但我不想将变量传递给
init
。相反,我想使用 EnvrionmentObject。我尝试了以“Edit 9/10/2023”开头的 this post 的回复,但它一直崩溃。
我尝试了这篇文章中的回复之一(以“两年后我有了解决方案”开头的回复),其中
onAppear
vs onChange
,但它似乎没有使用 NSPredicate 或刷新数据。
@EnvironmentObject var myObject: MyObject
@FetchRequest(sortDescriptors: [SortDescriptor(\.name)]) var scenarios: FetchedResults<Scenario>
...
.onAppear() {
print("onAppear caseid: \(myObject.Uid)")
scenarios.nsPredicate = NSPredicate(format: "caseid == %@", myObject.Uid as CVarArg)
}
您可以调用函数将谓词设置为正文中的第一件事,例如
func updatePredicate() {
if scenarios.nsPredicate != nil { return }
scenarios.nsPredicate = NSPredicate(format: "caseid == %@", myObject.Uid as CVarArg)
}
var body: some View {
let _ = updatePredicate()
...
}
这是可以接受的,因为设置谓词不是状态突变。