2013-10-07 3 views
0

У меня есть класс BrowserWindowController, который расширяет NSWindowController. У моего делегата приложения есть BrowserWindowController, который он выделяет, инициализирует и указывает переменную экземпляра при запуске приложения. Затем он отображает свое окно. Цель состоит в том, чтобы открыть окно из NIB.(Cocoa Mac) NSWindowController showWindow выделяет/инициализирует новый NSWindowController?

Однако код, который я использую, в конечном итоге выделяет TWO BrowserWindowControllers и инициализирует оба. Я использовал отладчик для отслеживания, когда метод initWithWindow Конвенции по биологическому оружию, называется:

browser = [[BrowserWindowController alloc] initWithWindowNibName:@"BrowserWindow"]; //this calls initWithWindow as expected 
[browser showWindow:nil]; //this allocates ANOTHER BWC and calls initWithWindow on it! 

ShowWindow делает новый BrowserWindowController. Я не знаю, что указывает на новый объект, который он делает. Для меня это огромная проблема. Любой способ обойти это или создать окно, используя другой метод? Или я мог бы хотя бы получить указатель на контроллер, который showWindow создает по любой причине?

+0

Знаете ли вы, когда я вызываю showWindow, он проходит через множество встроенных вызовов метода загрузки nib. Может быть, где-то в моем файле xib мне нужно что-то изменить? – sudo

+0

Итак, я тестировал в Инструментах, и он говорит, что ответственная библиотека распределения выделенного браузераWindowController - AppKit. – sudo

+0

И еще одна причина, почему вы используете nil здесь, когда вы используете self ?? –

ответ

0

Худшее решение когда-либо. Проблема заключалась в том, что у меня было свойство в моем контроллере, называемом «владелец», который был NSString. NSWindowController уже имеет свойство «владелец», и я этого не заметил. Так или иначе, это привело к тому, что загрузчик NIB сделал второй контроллер без доступного указателя на него и сделал некоторые другие странные вещи.

Поэтому я переименовал его, и он работает сейчас. Слава богу ... Я срывал волосы с этой проблемой.

2

Вы проверили состояние, подобное этому, и попробуйте?

if !(browser) 
{ 
browser = [[BrowserWindowController alloc] initWithWindowNibName:@"BrowserWindow"]; //this calls initWithWindow as expected 
[browser showWindow:nil]; 
} 
+0

Я пробовал это только сейчас, и условие if выполнено. Он определенно нераспределен до первой строки моего образца кода. – sudo

Смежные вопросы