Причина в том, что представление контроллера представления загружается лениво. Это означает, что представление контроллера загружается только из кончика (или через -loadView
) при первом обращении к свойству view
. Если вы попытаетесь получить доступ к меткам до того, как представление будет загружено, они будут равны нулю, а любые отправленные вами сообщения будут запрещены.
Таким образом, чтобы загрузить представление, вы можете сделать это:
/* make sure the view is loaded */
[vc view];
/* Access the label properties */
vc.titleLabel.text = @"testing";
Однако принудительная загрузка представления может быть не очень хорошей идеей во всех ситуациях, особенно если контроллер представления не будет отображаться сразу и вы хотите сохранить память.
В этом случае вы можете создать метки в методе контроллера init
, чтобы они всегда существовали, и добавить их в представление контроллера представления вручную в -viewDidLoad
, а не в своем кончике. Это позволит работать стандартному режиму отложенной загрузки, но пользователи вашего класса могут по-прежнему устанавливать свойства для меток до загрузки представления.
Альтернативой является предоставление простых NSString
свойств со связанными ivars на контроллере представления для представления любых заголовков или текста в представлении. Затем в вашем -viewDidLoad
вы можете установить текст меток равным значению этих свойств. Пользователи вашего контроллера представления могут затем установить эти свойства до загрузки представления.