Swift / iOS: IBOutlet nil после загрузки контроллера вида
Я создаю приложение (в XCode 8.2.1), в котором некоторые объекты отображаются на 2D-доске, и когда пользователь нажимает на один из этих объектов, некоторая информация должна отображаться об этом в виде модального информационного окна. Мой дизайн состоит в том, чтобы информация была записана в отдельном контроллере представления, который я буду отображать при необходимости.
Я разработал базовую заглушку для второго контроллера представления и добавил к ней одну метку в конструкторе интерфейсов. Затем я связал этот ярлык с моим пользовательским классом VC:
class InfoViewController: UIViewController {
@IBOutlet weak var info: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
func displayInfo() {
info.attributedText = NSAttributedString(string: "abc")
}
}
Однако когда я тестирую свое приложение и нажимаю на объект,info
полеnil
даже вviewDidLoad()
метод моего пользовательского класса VC. Я показываю свой VC следующим образом:
let infoViewController = InfoViewController()
infoViewController.modalPresentationStyle = .overCurrentContext
self.present(infoViewController, animated: true, completion: nil)
infoViewController.displayInfo()
(Примечание: в конце у меня будет только один экземплярInfoViewController
но это только для тестирования. Я не ожидаю, что глобальный экземпляр будет иметь какое-либо значение?)
Как я уже сказал, будь внутриviewDidLoad()
метод или вdisplayInfo()
метод,info
всегдаnil
, такой что постановка егоattributedString
Атрибут вылетает приложение. Думаяpresent
метод может быть вызван асинхронно, я пытался вызватьdisplayInfo()
изнутриviewDidLoad()
, но это не имело никакого значения.
Может ли кто-нибудь сказать мне, что я забыл, что позволило бы мойIBOutlet
от правильной инициализации правильно?
Спасибо!
Дэвид