如何修复错误:@FetchRequest 中的“属性初始化程序在”自我“可用”之前运行
Posted
技术标签:
【中文标题】如何修复错误:@FetchRequest 中的“属性初始化程序在”自我“可用”之前运行【英文标题】:how to fix the error: 'property initializers run before' self 'is available' in @FetchRequest 【发布时间】:2021-01-09 21:26:17 【问题描述】:我有以下结构,在@FetchRequest 中我得到一个谓词错误,var 'nomAcuariL',我不知道如何解决这个错误,如何初始化属性?
错误:
enter image description here
import SwiftUI
struct Llist: View
var nomAcuariL : String
var parametres : Parametres
@Environment(\.managedObjectContext) var moc
@FetchRequest(entity: Parametres.entity(),sortDescriptors: [NSSortDescriptor(keyPath: \Parametres.nomParametres, ascending: true)], predicate: NSPredicate(format: "nomParametres = %@", nomAcuariL)) var contactos: FetchedResults<Parametres>
var body: some View
List
ForEach(contactos, id:\.self) contact in
Text("\(contact.nomParametres ?? "")")
【问题讨论】:
这是否回答了您的问题***.com/a/59345830/12299030? 【参考方案1】:您不能在 FetchRequest 中使用实例成员 nomAcuariL
,因为它还没有被初始化。换句话说,当您尝试初始化 FetchRequest 时,它并不存在。您需要将该值通过某个已经存在的对象传递给 fetch 请求。尝试使用可以在其中实例化包含数据的类或结构,或者简单地使用文字字符串。
【讨论】:
我该怎么做呢?我不知道该怎么做 想到了使用共享的 ObservedObject。设置一个单例(基本上)类,将数据放入其中并使用它。然而,这是一个完全不同的问题。 你不能给出答案并说这是一个完全不同的问题。单身不是去这里的方式。尝试使用动态谓词。在 .onAppear 你可以设置 contactos.nsPredicate = ... 你可能需要 DispatchQueue.main.async 围绕它。以上是关于如何修复错误:@FetchRequest 中的“属性初始化程序在”自我“可用”之前运行的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SwiftUI 中限制 FetchRequest 中的结果数
当SwiftUI中的相关实体发生变化时,如何更新@FetchRequest?
SwiftUI - 如何在 init 中使用 fetchRequest 更新数据