Как создать экземпляр контроллера представления, IBOutlets равны нулю при вызове функций

#swift #xcode #viewcontroller

#быстрый #xcode #контроллер просмотра

Вопрос:

Вот мой контроллер всплывающего окна:

 import UIKit  class PopupViewController: UIViewController {    var bigVC = GameViewController()  var cardPhoto: UIImage?  var nameLabel: String?  var bio: String?  var index: Int?    @IBOutlet weak var photo: UIImageView!  @IBOutlet weak var label: UILabel!  @IBOutlet weak var button: UIButton!  @IBOutlet weak var story: UILabel!        override func viewDidLoad() {  super.viewDidLoad()   let storyboard: UIStoryboard = UIStoryboard.init(name: "Main", bundle: nil)  let firstViewController: GameViewController = storyboard.instantiateViewController(withIdentifier: "GameScreen") as! GameViewController    photo.image = cardPhoto  label.text = nameLabel  story.text = bio      }      @IBAction func removePressed(_ sender: UIButton) {    bigVC.removingCard(indexToRemove: index!)  bigVC.resetImages()  dismiss(animated: true, completion: nil)    }     }   

Моя функция bigVC.resetImages() должна измениться на изображения 7 кнопок в массиве UIButtons. Функция работает идеально, но массивы возвращают ноль, и приложение выходит из строя, когда функция вызывается из другого контроллера представления. Как правильно создать экземпляр контроллера вида, чтобы я вызывал эти кнопки?

Это контроллер всплывающего окна для карточной игры. В нем есть кнопка, которая при нажатии должна удалить карту из руки игрока и закрыть всплывающее окно, чтобы вернуться к контроллеру просмотра игры. Как сделать чан

Ответ №1:

Вам нужно установить

 self.bigVC = firstViewController  

затем нужно дождаться загрузки GameViewController (вызывается viewDidLoad), прежде чем вызывать повторные настройки. Так что этот массив не вернет ноль.

Комментарии:

1. где мне это сделать? В моем контроллере всплывающего вида viewDidLoad? Должен ли я вызывать bigVC.viewDidLoad() внутри своей функции перед вызовом reset? Не уверен, как реализовать это решение…

Ответ №2:

попробуйте это

 @IBAction func removePressed(_ sender: UIButton) {  let firstViewController = storyboard?.instantiateViewController(withIdentifier: "GameScreen") as! GameViewController    firstViewController.removingCard(indexToRemove: index!)  firstViewController.resetImages()  dismiss(animated: true, completion: nil)   }  

Комментарии:

1. Это также приводит к тому же сбою и отображает те же ошибки