Я не могу обновить EnvironmentObject данными из сетевого ответа. Исходные данные отображаются правильно. Я хочу, чтобы вызов класса API обновлял глобальное состояние с ответом. Затем я получил сбой
Неустранимая ошибка: Обнаружен ObservableObject типа AppState.
View.environmentObject (_ :) для AppState может отсутствовать как предок этого представления. File /BuildRoot / Library / Caches / com.apple.xbs / Sources / Monoceros_Sim / Monoceros-30.4 / Core / EnvironmentObject.swift, строка 55 #
struct GameView: View {
var location = LocationService()
@EnvironmentObject var appState: AppState
var body: some View {
VStack{
Text("countryRegion: \(self.appState.countryRegion)")
Text("adminDistrict: \(self.appState.adminDistrict)")
}.onAppear(perform: startMonitoring)
}
func startMonitoring() {
self.appState.isGameActive = true
self.location.startMonitoringLocation()
}
}
class LocationService: NSObject, CLLocationManagerDelegate{
@EnvironmentObject var appState: AppState
...
func getAddress(longitude: CLLocationDegrees, latitude: CLLocationDegrees) {
let url = URL(string: "http://dev.virtualearth.net/REST/v1/Locations/\(latitude),\(longitude)?o=json&key=\(self.key)")!
URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let data = data else { return }
let response = try! JSONDecoder().decode(Results.self, from: data)
DispatchQueue.main.async {
self.appState.adminDistrict = response.resourceSets[0].resources[0].address.adminDistrict;
self.appState.countryRegion = response.resourceSets[0].resources[0].address.countryRegion;
}
}.resume()
}
Объявление AppState:
class AppState: ObservableObject {
@Published var isGameActive = false
@Published var countryRegion = ""
@Published var adminDistrict = ""
}
опубликовать структуру, которая присоединяет объект среды AppState к иерархии представления. Я прикрепил AppState в SceneDelegate к ContentView в качестве моего корневого представления (если я правильно понял)
window.rootViewController = UIHostingController(rootView:ContentView().environmentObject(appState))
Должен ли яприкрепить его к каждому представлению, которое изменяет AppState?