Я новичок в приложениях, основанных на документах, и поэтому, возможно, я упустил что-то фундаментальное. Я написал приложение на основе документа, которое использует подкласс 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, получает документ напрямую? Приведенный выше код работает, но кажется, что этого не должно быть.
Изменить: уточнение
IBOutlet
, связанный с владельцем файла, то это должен быть экземпляр контроллера окна. Если вы хотите куда-нибудь загрузить свой проект, я могу взглянуть на него. - person   schedule 06.05.2011