如何修复错误:@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中的相关实体发生变化时,如何更新@FetchRequest?

SwiftUI - 如何在 init 中使用 fetchRequest 更新数据

如何修复:模块“tensorflow”没有属性“会话”[重复]

核心数据:如何显示 fetchrequest 的结果以计算表格视图单元格中的值