Итак, у меня возникла странная проблема, когда в моем стеке просмотра .onAppear запускает мою функцию для извлечения данных с моего сервера, но не может отображать элементы карты, которые я создал для интерфейса. То, чего я пытаюсь добиться, - это когда пользователь открывает приложение и выводит его на панель инструментов, на нем отображаются различные заголовки платформы. Я не получаю никаких ошибок, так как объект JSON читается правильно.
Некоторые вещи, которые я прочитал, это то, что представление может нуждаться в обновлении после вызова .onAppear, но у меня есть ресурсы нашел не очень объяснил как это сделать. Первый бит кода - мой JSON объект:
{"results" : [{"id":1,"title":"Meet ergoWare","header_image":"http://gba.ergoware.io/cache/content/topstory/ergo_news_01.svg","summary":"GBA's New Ergonomic Portal!"}]}
, который извлекается через эту функцию
func loadHeadlines(CDNLink: String) {
guard let url = URL(string: CDNLink) else {
print("Invalid URL")
return
}
let request = URLRequest(url: url)
URLSession.shared.dataTask(with: request) { data, response, error in
if error != nil {
print("Fetch failed: \(error?.localizedDescription ?? "Unknown error")")
return
} else {
do {
let decodedResponse = try JSONDecoder().decode(Response.self, from: data!)
print(decodedResponse)
self.results = decodedResponse.results
} catch let err {
print("Error parsing: \(err)")
}
}
}.resume()
}
Затем добавляется тег .onAppear к моему HStack, он преформирует функцию и запускает мой оператор ForEach следующим образом:
ScrollView(showsIndicators: false){
Text("HEADLINES")
.font(.system(size: 18))
.fontWeight(.medium)
.foregroundColor(.secondary)
.frame(maxWidth: .infinity, alignment: .leading)
ScrollView(.horizontal, showsIndicators: false) {
HStack {
ForEach(results) { result in
CardView(image: result.header_image, heading: result.title, summary: result.summary)
}
}.onAppear(perform:{self.loadHeadlines(CDNLink: "http://\(self.defaults.object(forKey: "domain") as! String)/cdn?funct=fetchNews")})
}
Итак, мой вопрос: почему CardView не отображается при загрузке сцены? С помощью симулятора, если я собираю и тестирую приложение, затем выключаю его и возвращаюсь, карты начинают отображаться. Спасибо за любую информацию, которую вы можете предоставить. Ниже у меня есть несколько ссылок на мой полный код.
Вид панели инструментов CardView