Я пытаюсь обновить UILabel и UIImageView в основном потоке, но это не работает.
У меня есть два ViewController (здесь я назову их ChooseCountryVC и DisplayCountryVC), и в ChooseCountryVC пользователь может выбрать страну, которая ему нравится, а в DisplayCountryVC я хочу отображать название страны в метке и флаг страны в imageView.
Основной технологический процесс приведен ниже.
- Нажмите кнопку «Выбрать страну» в DisplayCountryVC.
- Представьте ChooseCountryVC, который в основном представляет собой tableView всех стран, и пользователь может выбрать страну.
- Когда пользователь выбирает страну, установите свойство «countryCode» в DisplayCountryVC и закройте ChooseCountryVC, чтобы вернуться в DisplayCountryVC.
- В функции didSet для «countryCode» в DisplayCountryVC добавьте процесс обновления пользовательского интерфейса в основной поток.
Пример кода, относящийся к этому вопросу, приведен ниже.
●Выберите странуВК
// when user has chosen a country and dismiss this VC
let displayCountryVC = DisplayCountryVC()
displayCountryVC.countryCode = self.chosenCountryCode
self.dismiss(animated: true, completion: nil) // go back to DisplayCountryVC
●DisplayCountryVC
var countryCode: String? {
didSet {
guard let countryCode = countryCode else {return}
let countryName = self.getCountryName(with: countryCode) // this function provides countryName with no problem
let flagImage = self.getFlag(with: countryCode) // this function provides flag image with no problem
DispatchQueue.main.async {
self.imageView.image = flagImage
self.label.text = countryName
print("label's text is", self.label.text) // somehow, this prints out country's name correctly in console but apparently UI has not been updated at all
}
}
}
Если кто-нибудь знает, что не так с моими кодами или нуждается в дополнительной информации, пожалуйста, дайте мне знать.