Ссылка на подкласс NSWindowController возвращает его документ - это правильно?

Я новичок в приложениях, основанных на документах, и поэтому, возможно, я упустил что-то фундаментальное. Я написал приложение на основе документа, которое использует подкласс NSWindowController для интерфейса и подкласс NSDocument для модели. Согласно документации, я инициализирую windowController в makeWindowControllers и загружаю его xib. В построителе интерфейса у xib мой подкласс windowController установлен как владелец файла. Среди представлений в окне у меня есть подкласс NSOutlineView, а источник данных и делегат NSOutlineView также обновляются в пере и подключаются к windowController через IBOutlets.

Согласно документации, я должен иметь доступ к документу из источника данных OutlineView через [документ windowController]. Однако ссылка на windowController (через IBOutlet) из источника данных OutlineView вместо этого дает мне документ!

Это привело к некоторому довольно уродливому коду в хранилище данных OutlineView (который является подклассом NSObject в xib windowController) для получения документа, например:

-(MyDocument *)myDocument {
    MyDocument *theDocument = (MyDocument *)myWindowController;
    return theDocument;
}

Где IBOutlet в файле заголовка ссылается на myWindowController как:

IBOutlet MyWindowController *myWindowController

Вкратце - почему в этой ситуации IBOutlet, подключенный к windowController, получает документ напрямую? Приведенный выше код работает, но кажется, что этого не должно быть.

Изменить: уточнение


person Geebs    schedule 05.05.2011    source источник
comment
Какой класс действует как источник данных представления структуры и где вы создаете экземпляр этого класса?   -  person    schedule 06.05.2011
comment
Не имея доступа к файлу пера и исходному коду, я не могу придумать причину, по которой у вас возникла эта проблема. Если класс, который действует как источник данных представления структуры, имеет IBOutlet, связанный с владельцем файла, то это должен быть экземпляр контроллера окна. Если вы хотите куда-нибудь загрузить свой проект, я могу взглянуть на него.   -  person    schedule 06.05.2011
comment
Спасибо за ответ! Источник данных outlineView - это NSObject, созданный в xib windowController, связанный с владельцем файла через IBOutlet.   -  person Geebs    schedule 06.05.2011


Ответы (1)


Хорошо, я нашел ответ на этот вопрос - не устанавливайте случайно владельца файла xib на NSDocument вместо windowController в другой части вашего кода и забудьте, что вы это сделали! Это переопределяет владельца файла, который вы ранее установили в xib.

person Geebs    schedule 06.05.2011