Доступ к элементам управления NIB окна - PullRequest
0 голосов
/ 18 июля 2010

Я унаследовал новый класс от NSWindowController для реализации windowDidLoad, а затем доступа к элементам управления, определенным NIB:

- ( void ) windowDidLoad
{
   NSArray * controls = [ [ [ self window ] contentView ] subviews ];
   int i;

   NSRunAlertPanel( @"windowDidLoad", @"", @"OK", NULL, NULL );

   if( [ controls count ] == 0 )
      NSRunAlertPanel( @"no hay controles", @"", @"OK", NULL, NULL );   

   for( i = 0; i < [ controls count ]; i++ )
      NSRunAlertPanel( @"control", @"", @"OK", NULL, NULL );   
}

выполнение кода идет нормально. Отображается окно NIB, но у подпредставлений нет элементов. Как получить доступ к окну дочерних элементов управления? Спасибо,

1 Ответ

1 голос
/ 18 июля 2010

Отображается окно NIB, но subviews не имеет элементов.

Возможно, вы забыли подключить выход окна к своему окну.Когда розетка не подключена, свойство розетки содержит nil, поэтому [self window] возвращает nil.

Затем вы отправляете сообщения на nil.Я говорю «сообщения», потому что каждое сообщение для nil ничего не делает и возвращает nil, 0 или 0.0 в зависимости от ситуации .Это означает, что вы отправляете сообщение contentView на nil, что возвращает nil, что означает, что вы отправляете сообщение subviews на nil, что также возвращает nil.

какЯ сказал, что сообщение nil возвращает nil, 0 или 0.0;когда вы отправляете сообщение count на controls, поскольку controls равно nil, как объяснено в предыдущем абзаце, это сообщение возвращает 0.

Исправление заключается в открытии вашего пера в IBи подключите розетку window вашего контроллера к вашему окну.

Кстати, вы не должны использовать индексы для зацикливания NSArrays.Есть более простой и понятный способ сделать это: Быстрое перечисление .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...