#ios14 #swiftui-environment
#ios14 #swiftui-среда
Вопрос:
У меня есть метод класса, который, по-видимому, не видит объект @EnvironmentObject var categories: Categories в верхней части класса. Я знаю, что это работает, так как я использую его в нескольких других файлах. Это также означает, что мое кодирование в SceneDelegate является правильным. Сбой программного обеспечения с ошибкой: Поток 1: Неустранимая ошибка: не найден ObservableObject категорий типов. View.environmentObject(_:) для категорий может отсутствовать как предок этого представления. Ошибка возникает в методе updateTotals() в цикле «for»
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
}
}
Ответ №1:
Я где-то недавно читал, что @EnvironmentObject похож на @State в том смысле, что изменение любого параметра приведет к тому, что body обновит представление. Поэтому ни один из них не должен быть в классе. Я реорганизовал свое программное обеспечение и с тех пор не видел ошибки.