Я пытаюсь обновить UILabel и UIImageView в основном потоке, но он не работает.
У меня есть два ViewController (я назову их ChooseCountryV C и DisplayCountryV C здесь) и в ChooseCountryV C, пользователь может выбрать страну, которая ему нравится, и в DisplayCountryV C Я хочу отобразить название страны в метке и флаг страны в imageView.
Основа c Ход процесса ниже.
- Нажать кнопку «Выбрать страну» в DisplayCountryV C
- Представить ChooseCountryV C, которая в основном представляет собой таблицу. Представление всех стран позволяет пользователю выбрать страну
- Когда пользователь выбирает страну, устанавливает свойство с именем "countryCode" в DisplayCountryV C и отклоняет ChooseCountryV C до go обратно к DisplayCountryV C
- В функции didSet для "countryCode" в DisplayCountryV C , добавьте процесс обновления пользовательского интерфейса в основной поток.
Ниже приведен пример кода, связанный с этим вопросом.
● ChooseCountryV C
* 10 20 *
● DisplayCountryV C
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
}
}
}
Если кто-нибудь знает, что не так с моими кодами или нужна дополнительная информация, пожалуйста, сообщите мне.