Почему UILabel 0x0? - PullRequest
       17

Почему UILabel 0x0?

1 голос
/ 23 мая 2009

Я загружаю перо как:

ContentViewController *theController = [[ContentViewController alloc] initWithNibName:@"ContentView" bundle:nil];

с надписью. Контроллер представления имеет IBOutlet UILabel с @property retain и синтезированной переменной. Когда я загружаю перо, как указано выше, из другого класса и ссылаюсь на свойство текста метки как:

theController.myLabel.text = @"testing...";

myLabel имеет адрес 0x0. Перед назначением текст является «недействительным». После назначения его типом является ContentViewController. Есть некоторые проблемы с управлением памятью. Есть идеи?

Ответы [ 3 ]

3 голосов
/ 24 мая 2009

Соединения не устанавливаются сразу при вызове инициализации. Главное представление не загружается до тех пор, пока не получен доступ к свойству view контроллера представления, что также приводит к установке всех ваших других IBOutlets. Если вы пытаетесь получить доступ к IBOutlet до загрузки представления, он будет нулевым. Как правило, код назначения должен входить в -viewDidLoad. Если вам нужно что-то сделать перед добавлением вида на экран, просто откройте вид, прежде чем назначать что-либо любому из IBOutlets:

theController.view;
theController.myLabel.text = @"testing...";
0 голосов
/ 24 марта 2011

Вы пишете какой-либо код,

-(void)loadView {  }

метод?

Если это так, объект IBOutlet не выделяется.
Попробуйте прокомментировать эту функцию.
И если вам нужна эта функция, вызываются вызовом loadNibname: метод для вызова этого viewController.

0 голосов
/ 23 мая 2009

ViewControllers загружают свои представления только по требованию. Неявный вызов getMyLabel в назначении вызывает загрузку вида и подключение розетки. Что касается ошибки типа, я не знаю, почему myLabel получит тип ContentViewController. Вам следует проверить соединения в конструкторе интерфейсов и убедиться, что они правильно подключены.

...