Swift / iOS: IBOutlet nulo após carregar o controlador de exibição
Estou construindo um aplicativo (no XCode 8.2.1) em que alguns objetos são exibidos em uma placa 2D e, quando o usuário toca em um desses objetos, algumas informações devem ser exibidas sobre ele como uma caixa de informações modal estilizada. Meu projeto é ter as informações gravadas em um controlador de exibição separado, que eu exibiria quando necessário.
Projetei um esboço básico para o segundo controlador de exibição e adicionei um único rótulo ao construtor de interface. Em seguida, vinculei este rótulo à minha classe de VC personalizada com a tecla Ctrl:
class InfoViewController: UIViewController {
@IBOutlet weak var info: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
func displayInfo() {
info.attributedText = NSAttributedString(string: "abc")
}
}
No entanto, quando testo meu aplicativo e toco no objeto, oinfo
campo énil
mesmo noviewDidLoad()
método da minha classe VC personalizada. A maneira como estou exibindo meu VC é a seguinte:
let infoViewController = InfoViewController()
infoViewController.modalPresentationStyle = .overCurrentContext
self.present(infoViewController, animated: true, completion: nil)
infoViewController.displayInfo()
(Nota: no final, terei apenas uma única instância deInfoViewController
mas isso é apenas para teste. Não espero que uma instância global faça alguma diferença?)
Como eu disse, seja dentro doviewDidLoad()
método ou nodisplayInfo()
método,info
é semprenil
, de modo que definir suaattributedString
atributo trava o aplicativo. Pensando opresent
método pode ser chamado de forma assíncrona, tentei chamardisplayInfo()
de dentroviewDidLoad()
, mas isso não fez nenhuma diferença.
Alguém pode me dizer o que eu esqueci que permitiria que meuIBOutlet
de ser corretamente inicializado corretamente?
Obrigado!
David