Как мне получить доступ к выходу из другого View Controller? (Быстрый)

Я новичок в программировании на Swift и пытаюсь создать простое приложение, которое представляет собой задачу, которую вы затем можете выполнить, нажав кнопку. Затем в отдельном контроллере представления вы разблокируете изображения, когда выполнили определенное количество задач.

В контроллере Home View есть кнопка, которая при нажатии увеличивает мою переменную count на единицу. В основном я хочу проверить и посмотреть, превышает ли это количество определенное число, и если это так, я хочу, чтобы изображение было видно.

Вот моя функция проверки значков:

func checkBadges() {
        let vc = AccomplishmentsViewController(nibName: "AccomplishmentsViewController", bundle: nil)
        if count >= 3 {
            print("Bronze Trophy should be showing")
            vc.bronzeTrophy.isHidden = false
        }
    }

Проблема в том, что я получаю сообщение об ошибке «Неожиданно обнаружено nil» при неявном развертывании необязательного значения. Я пробовал множество разных вещей, чтобы обойти это, но безуспешно. Любая помощь будет принята с благодарностью. Спасибо!

Для справки вот мой другой контроллер представления:

class AccomplishmentsViewController: UIViewController {

    @IBOutlet var bronzeTrophy: UIImageView!

}

person the-happy-coder    schedule 04.05.2021    source источник
comment
let vc = AccomplishmentsViewController... вы создаете новый экземпляр этого, который не будет работать, потому что он отличается от текущего CompleishmentsViewController   -  person aheze    schedule 04.05.2021
comment
Какая связь между HomeViewController и AccomplishmentsViewController?   -  person aheze    schedule 04.05.2021
comment
Они связаны с помощью TabBarController. Есть ли способ подключиться к работающему экземпляру?   -  person the-happy-coder    schedule 04.05.2021
comment
Проверьте это: stackoverflow.com/a/64600938/14351818   -  person aheze    schedule 04.05.2021


Ответы (1)


Краткий ответ: не делайте этого. Вы должны рассматривать представления контроллера представления как частные.

Если вы возитесь с представлениями другого контроллера представления, вы нарушаете принцип инкапсуляции. Один модуль не должен зависеть от деталей реализации другого модуля.

Вместо этого добавьте функцию Bool showTrophy(_ show: Bool).

Сохраняйте указатель на другой контроллер представления (не создавайте новый экземпляр, как указывает aheze.)

В методе showTrophy вашего AccomplishmentsViewController установите видимость значка трофея соответствующим образом.

person Duncan C    schedule 04.05.2021