Поток 1. Неустранимая ошибка: неожиданно обнаружен ноль при неявном развертывании необязательного значения в swift - PullRequest
0 голосов
/ 06 ноября 2019

У меня проблема с выполнением функции в viewController из другого viewController

У меня есть два контроллера представления, один из которых называется

ubicacionContainerViewController

, а другой

ReservaViewController

поэтому я хочу вызвать функцию в reservaViewController из ubicacionContainerViewController

поэтому в ubicacionContainerViewController у меня есть этот код:

let storyboard: UIStoryboard = UIStoryboard.init(name: "Main", bundle: nil)
let reservaViewController: ReservaViewController = 
storyboard.instantiateViewController(withIdentifier: "ReservaViewController") as! 
      ReservaViewController

reservaViewController.cambiarContainer()

Я использовал приведенный выше код для вызова функции в ReservaViewController ивсе в порядке, это называется

, но теперь в ReservaViewController у меня есть кнопки тезисов

 @IBOutlet weak var btnSelectUbicacion: UIButton!
 @IBOutlet weak var btnSelectServicio: UIButton!
 @IBOutlet weak var btnSelectHora: UIButton!
 @IBOutlet weak var btnConfirmacionReserva: UIButton!

и эта функция:

func cambiarContainer() {
    self.btnSelectUbicacion.setBackgroundImage(#imageLiteral(resourceName: 
             "fondo_transparente"), for: .normal) // here is the error
    self.btnSelectServicio.setBackgroundImage(nil, for: .normal)
    self.btnSelectHora.setBackgroundImage(#imageLiteral(resourceName: 
            "fondo_transparente"), for: .normal)
    self.btnConfirmacionReserva.setBackgroundImage(#imageLiteral(resourceName: 
             "fondo_transparente"), for: .normal)
}

, поэтому проблема в том, что янажмите кнопку в ubicacionContainerViewController, чтобы вызвать эту ошибку.

Я пытался использовать "?"

func cambiarContainer(posicion: Int) {        
    self.btnSelectUbicacion?.setBackgroundImage(#imageLiteral(resourceName: 
             "fondo_transparente"), for: .normal) //no the error disapear
    self.btnSelectServicio?.setBackgroundImage(nil, for: .normal)

    self.btnSelectHora?.setBackgroundImage(#imageLiteral(resourceName: 
            "fondo_transparente"), for: .normal)
    self.btnConfirmacionReserva?.setBackgroundImage(#imageLiteral(resourceName: 
             "fondo_transparente"), for: .normal)
}

теперь все в порядке, все работает нормально, но проблема в том, что фоновое изображение кнопок не работает. ничего не изменилось.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

В данный момент вы звоните cambiarContainer розетки еще не подключены, и поэтому код выходит из строя.

Удалить

reservaViewController.cambiarContainer() 

и переместите код для изменения пользовательского интерфейса в viewDidLoad

func viewDidLoad() {
   super.viewDidLoad() 
   self.btnSelectUbicacion.setBackgroundImage(#imageLiteral(resourceName: "fondo_transparente"), for: .normal) // here is the error
   self.btnSelectServicio.setBackgroundImage(nil, for: .normal)
   self.btnSelectHora.setBackgroundImage(#imageLiteral(resourceName: "fondo_transparente"), for: .normal)
   self.btnConfirmacionReserva.setBackgroundImage(#imageLiteral(resourceName: "fondo_transparente"), for: .normal)
}
0 голосов
/ 06 ноября 2019

проблема здесь в том, что вы уже создали экземпляр ReservaViewController , но его представление еще не загружено, а метод cambiarContainer вызывает один или несколько из (в настоящее время не загружен)) розетки контроллера;поэтому он указывает на то, что ссылки равны nil.

Попробуйте загрузить представление перед вызовом метода cambiarContainer , добавив следующую строку:

_ = reservaViewController.view
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...