Как исправить ошибку nil в конфигурации IBOutlet и не отображать пользовательский интерфейс при вызове View Controller? - PullRequest
1 голос
/ 02 апреля 2020

Я получаю сообщение об ошибке, когда пытаюсь настроить IBOutlets программно. Всякий раз, когда я пытался настроить свой пользовательский интерфейс, я получал эту ошибку:

Неустранимая ошибка: неожиданно обнаружил ноль при неявном развертывании необязательного значения

Но когда я прокомментировал код (функция setupKategori()), мой пользовательский интерфейс стал прозрачным, как это (вы можете видеть, что видна только панель навигации, где должны были быть видны все элементы в файле XIB):

enter image description here

Вот мой код:

Функция настройки пользовательского интерфейса

func setupKategori() { // the function that throws the error whenever I call it in viewDidLoad()
        kategoriLabel.font = .boldTitilliumWeb(ofSize: 18)
        kategoriLabel.textColor = .init(hex: "#333333")
        kategoriLabel.sizeToFit()

        kategoriDetailLabel.font = .boldTitilliumWeb(ofSize: 18)
        kategoriDetailLabel.textColor = .init(hex: "#222222")
        kategoriDetailLabel.sizeToFit()

        showKategoriButton.addTarget(self, action: #selector(showKategoriAction(_:)), for: .touchUpInside)
    }

РЕДАКТИРОВАТЬ: Вызов представления Контроллер

func routeToFilter() {
    //Analytics.logEvent("pw_list_filter", parameters: nil)
    let destinationVC = FilterPWVC()
    let nav = UINavigationController(rootViewController: destinationVC)
    present(nav, animated: true, completion: nil)
  }

Для некоторой информации я уже подключил IBOutlets из файла XIB. И я действительно новичок в iOS программировании, поэтому у меня до сих пор об этом недостаточно знаний. Если вам нужна дополнительная информация, не стесняйтесь спрашивать, и я предоставлю ее вам. Любая помощь будет оценена. Спасибо!

1 Ответ

1 голос
/ 02 апреля 2020

Поскольку вы пытаетесь создать экземпляр вашего контроллера представления с помощью метода init() (который в свою очередь вызывает init(nibName:bundle:) с параметрами nil), то, если вы ожидаете, что ваш контроллер представления будет загружен из файла XIB, ваш файл XIB имя файла должно совпадать с именем класса контроллера представления.

Итак, в вашем случае это должно быть: "FilterPWV C .xib", а не "FilterPWView.xib".

ИЛИ, вместо переименования xib и использования init(), вы также можете указать имя пера, используя init(nibName:bundle:) напрямую, например:

// I'm assuming the xib is in the main bundle, so I've passed `nil` 
// in for the bundle here
let destinationVC = FilterPWVC(nibName: "FilterPWView", bundle: nil)
...