Каркасы и XIB - PullRequest
       16

Каркасы и XIB

0 голосов
/ 22 февраля 2011

Я столкнулся со странной проблемой, связанной с файлом XIB в моей структуре.Этот файл XIB содержит NSWindow, NSTableView и две кнопки, которые все подключены через розетки.TableView и кнопки работают как положено, но NSWindow всегда (null).

Выход окна подключен и XIB загружается правильно , поэтому я действительно удивлен, что это не работает для этого конкретного экземпляра.

Я загружаю XIB следующим образом: BOOL success = [NSBundle loadNibNamed:@"SomeXIB" owner:self];

Затем я пытаюсь изменить окно:

[window setLevel:NSModalPanelWindowLevel];
[window center];
[window makeKeyAndOrderFront:self];

NSLog(@"Window: %@",window);

Оператор NSLog всегда возвращает (null) и ни один изописанные выше методы ничего не делают, окно появляется только потому, что установлен Visible At Launch, и не будет иначе.(что доказывает, что XIB загружен нормально)

Я что-то упустил?

Редактировать:

Вот все, что я делаю с окном:

BOOL success = [NSBundle loadNibNamed:@"BrowserPrompt" owner:self];

if (success == NO)  
{
    NSLog(@"Couldn't load XIB.");
    return NO;
}

[[self delegate] pickerWillShow:self];  

[window setLevel:NSModalPanelWindowLevel];
[window center];
[window makeKeyAndOrderFront:self];

1 Ответ

1 голос
/ 22 февраля 2011

Почти наверняка верно одно из следующих утверждений:

  • self.window не является IBOutlet
  • Владелец файла вашего XIB не того же класса, что и self
  • Вы не подключили NSWindow в IB к window IBOutlet владельца файла.
  • Вы устанавливаете window в nil между нагрузкой и использованием.
  • Вы запускаете окно изменения кода перед загрузкой кода (эта ошибка на удивление распространена).

Переопределить setWindow:, чтобы вы могли ввести запись в журнал или точку останова, убедиться, что она вызывается, и проверить, вызывается ли она с nil или правильным значением.

...