Я новичок в VIPER, и я создал самую простую демонстрацию в этой архитектуре, но у меня проблемы, так как UILabel в View / View Controller не обновляется. Это соответствующий код: Просмотр:
override func viewDidLoad() {
super.viewDidLoad()
presenter?.updateView()
}
Ведущий:
func updateView() {
interactor?.getText()
}
Взаимодействие:
func getText() {
presenter?.gotText(text: "Hello Viper")
}
Ведущий:
func gotText(text: String) {
view?.updateLabel(text: text)
}
Вид:
func updateLabel (text: String) {
print(text)
helloLabel.text = text
}
print (text) возвращает значение, но само представление не обновляется.
Я попытался обновить в основном потоке, но безуспешно. Я видел несколько проектов с аналогичным шаблоном (обновление представления в ViewController / label / backgroundColor и т. Д.), Но я не могу понять, что не так с моим кодом.
Образец доступен на GitHub https://github.com/veliborsantic/VIPER-simple-example Аналогичный проект доступен по адресу https://github.com/smalam119/live-news-viper, который работает должным образом.
РЕДАКТИРОВАТЬ 1: Я понял, что функция viewDidLoad вызывается дважды. Я устанавливаю сообщения печати как в viewDidLoad (), так и в updateLabel (text: String) следующим образом:
override func viewDidLoad() {
super.viewDidLoad()
print("viewDidLoad: ", helloLabel.text!)
presenter?.updateView()
}
func updateLabel (text: String) {
helloLabel.text = text
print("updateLabel: ", helloLabel.text!)
}
Outputs:
viewDidLoad:
updateLabel: Hello Viper
viewDidLoad:
Если я удалю конфигурацию для initialViewController в AppDelegate, viewDidLoad вызывается один раз, но модуль не загружается.
РЕДАКТИРОВАТЬ 2 / РЕШЕНО. После исследования мне пришлось сделать 3 вещи: сказать, что я не хочу инициализировать контроллер с помощью раскадровки, поэтому: 1. Отключите «Контроллер начального представления» 2. Отключите главное при развертывании Info и 3. Весь код из AppDelegate перемещается в Scene Delegate в сцене func (_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)