问题描述
我有一个类方法,它显然没有看到类顶部的@EnvironmentObject var 类别:类别对象。我知道这是有效的,因为我在其他几个文件中使用了它。这也意味着我在 SceneDelegate 中的编码是正确的。软件因错误而崩溃:线程 1:致命错误:未找到类别类型的 ObservableObject。类别的 View.environmentObject(_:) 作为此视图的祖先可能会丢失。错误发生在“for”循环中的 updatetotals() 方法中
struct CatItem: Codable,Identifiable {
var id = UUID()
var catNum: Int
var catName: String <-- this is the class I'm trying to reference
var catTotal: Double
var catPix: String
var catShow: Bool
}
class Categories: ObservableObject {
@Published var catItem: [CatItem]
}
class BaseCurrency: ObservableObject {
@EnvironmentObject var userData: UserData
@EnvironmentObject var categories: Categories
var foundNew: Bool = false
var newRate: Double = 0.0
var baseCur: BaseModel
//-----------------------------------------------------
// new base currency so need to update the system totals
//-----------------------------------------------------
func updatetotals() -> () {
for index in 0...(categories.catItem.count - 1) { <-- error here
categories.catItem[index].catTotal *= self.newRate
}
userData.totalArray[grandTotal] *= self.newRate
userData.totalArray[transTotal] *= self.newRate
userData.totalArray[userTotal] *= self.newRate
let encoder = JSONEncoder()
if let encoded = try? encoder.encode(self.baseCur) {
UserDefaults.standard.set(encoded,forKey: "base")
}
self.foundNew = false
}
}
解决方法
我最近在某处读到@EnvironmentObject 就像@State 一样,任何一个参数的更改都会导致主体更新视图。因此,这两个都不应该在一个类中。我已经重新组织了我的软件,从那以后就没有看到错误。